| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1026 人关注过本帖
标题:1个头文件和两个源文件的问题
只看楼主 加入收藏
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
收藏
已结贴  问题点数:8 回复次数:1 
1个头文件和两个源文件的问题
下边的三个文件来自c++ primer plus ,我分别写在三个文件中,但是之后点 “生成解决方案”就总是出现一下的类似命令,请问大神怎么解决?是头文件哪里出了什么问题?

无法解析的外部符号 "void __cdecl callme2(class StringBad)" (?callme2@@YAXVStringBad@@@Z),该符号在函数 _main 中被引用
1>E:\Clang编译器\PROJECTS\20170830\Debug\20170830.exe : fatal error LNK1120: 1 个无法解析的外部命令


这是头文件 string.h
#include<iostream>
#ifndef STRINGBAD_H_
#define STRINGBAD_H_
class StringBad
{
private:
    char* str;
    int len;
    static int num_string;

public:
    StringBad(const char* s);
    StringBad();
    ~StringBad();   //析构函数没有参数
    friend std::ostream& operator<<(std::ostream &os,const StringBad &st);
};
#endif


这是源文件1:   stringbad.cpp
#include <cstring>
#include "stringbad.h"
using namespace std;

int StringBad::num_string=0;

StringBad::StringBad(const char*s)
{
    len=std::strlen(s);
    str=new char[len+1];
    strcpy_s(str,len+1,s);
    num_string++;
    std::cout<<num_string<<endl;
}

StringBad::StringBad()
{
    len=4;
    str=new char[4];
    strcpy_s(str,4,"C++");
    num_string++;
    cout<<num_string<<":\""<<str<<"\"default object created\n";
}

StringBad::~StringBad()
{
    cout<<"\""<<str<<"\" object deletd, ";
    --num_string;
    cout<<num_string<<" left\n";
    delete[]str;
}

ostream& operator<<(ostream &os,const StringBad&st)
{
    os<<st.str;
    return os;
}


这是源文件2:  vegnews.cpp
#include<iostream>
using namespace std;
#include "stringbad.h"

void callme1(StringBad &);
void callme2(StringBad);

int main()
{
    {
        cout<<"starting an inner block.\n";
        StringBad headline1("celery stalks an midnight");
        StringBad headline2("Lettuce Prey");
        StringBad sports("Spinach Leaves bowl for dollars");
        cout<<headline1<<endl;
        cout<<headline2<<endl;
        cout<<sports<<endl;
        
        callme1(headline1);
        cout<<headline1<<endl;
        callme2(headline1);
        cout<<headline2<<endl;

        cout<<"Initialize one object to another:\n";
        StringBad sailor=sports;
        cout<<"sailors:"<<sailor<<endl;
        cout<<"assign one object to another:\n";

        StringBad knot;
        cout<<knot<<endl;
        cout<<"exiting the block.\n";
    }
    cout<<"end of the main()\n";
    return 0;
}

void callme1(StringBad&rsd)
{
    cout<<rsd<<endl;
}
void callme2(StringBad&sb)
{
    cout<<sb<<endl;
}

搜索更多相关主题的帖子: void str include std cout 
2017-08-30 10:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:8 
vegnews.cpp 中
    void callme2(StringBad);
    改为
    void callme2(StringBad&);
2017-08-30 11:44
快速回复:1个头文件和两个源文件的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015813 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved