永发信息网

C++救急。。error LNK2001: unresolved external symbol "public: __thiscall string::st

答案:4  悬赏:20  手机版
解决时间 2021-03-18 20:56
  • 提问者网友:骑士
  • 2021-03-17 21:34
#include
#include
class string
{
private:
char a[50];
public:
string();
string(char *m)
{
strcpy(a,m);
}
friend string operator+(string &cl1,string &cl2);
friend string operator-(string &cl1,string &cl2);
string& operator=(const string &cl1);
void display();
};

string operator+(string &cl1,string &cl2)
{
strcat(cl1.a,cl2.a);
return string(cl1.a);
}
string operator-(string &cl1,string &cl2)
{
int i=0;
for(;cl1.a[i]!='\0';i++)
{
if(cl1.a[i]==' ')break;
}
int j=0;
for(;cl2.a[j]!='\0';j++)
cl1.a[i+j]=cl2.a[j];
cl1.a[i+j+1]='\0';
return string(cl1.a);
}
string& string::operator=(const string &cl1)
{
char str[100];
strcpy(str,cl1.a);
return (*this);
}
void string::display()
{
cout<}

void main()
{
string s1("浙江大学 "),s3;
string s2("计算机学院欢迎您!");
s3=s1+s2;
s3.display();
s3=s1-s2;
s3.display();
}

程序编译没问题,但在运行时提示:
Linking...
40.obj : error LNK2001: unresolved external symbol "public: __thiscall string::string(void)" (??0string@@QAE@XZ)
Debug/40.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

求高手解答。甚谢!
最佳答案
  • 五星知识达人网友:平生事
  • 2021-03-17 21:49
这个错误的原因是 s3 初始化的时候没有参数,
而你的类没有 不带参数的构造函数。
对应方法1是 2楼这样的,加个构造函数,不带参数
方法2 是调用时,
string s1("浙江大学 ");
string s2("计算机学院欢迎您!");
string s3("");

另一个明显的错误是 operator=
这里strcpy给个一个局部变量,有什么用?
2 楼改的对,strcpy(a,cl1.a);

一个隐患就是你的字符串只有50,最大49个BYTE内容,
很容易不够用。可能会出意想不到的错误。建议改大。
将来实际应用中希望使用 CString 或 std::string
可避免容量问题。

最后,有个问题就是 s3=s1+s2 以后,如果调用
s1.display() 会发现,s1 被改变了!
这不合理。你看整数的加法,不会改加数的值的!

string operator+(string &cl1,string &cl2)
{
char strTemp[200];
strcpy(strTemp, cl1.a);
strcat(strTemp, cl2.a);
return string(strTemp);
}
减法存在同样的问题,自己改吧。
全部回答
  • 1楼网友:轻雾山林
  • 2021-03-17 23:47
太常见不过的问题了,需要对project进行设定,如下: 在project菜单项中选择Setting 然后选择C/C++项,在Category中选择Code Generation 在use runtime library中选择Debug Mulitithreaded 应该可以解决。
  • 2楼网友:野味小生
  • 2021-03-17 23:31
#include #include class String { private: char a[50]; public: String() { } String(char *m) { strcpy(a,m); } friend String operator+(String &cl1,String &cl2); friend String operator-(String &cl1,String &cl2); String& operator=(const String &cl1); void display(); }; String operator+(String &cl1,String &cl2) { strcat(cl1.a,cl2.a); return String(cl1.a); } String operator-(String &cl1,String &cl2) { int i=0; for(;cl1.a[i]!='\0';i++) { if(cl1.a[i]==' ')break; } int j=0; for(;cl2.a[j]!='\0';j++) cl1.a[i+j]=cl2.a[j]; cl1.a[i+j]='\0'; return String(cl1.a); } String& String::operator=(const String &cl1) { //char str[100]={0}; strcpy(a,cl1.a); return (*this); } void String::display() { cout<
  • 3楼网友:第幾種人
  • 2021-03-17 22:43
这个错误的原因是 s3 初始化的时候没有参数, 而你的类没有 不带参数的构造函数。 对应方法1是 2楼这样的,加个构造函数,不带参数 方法2 是调用时, string s1("浙江大学 "); string s2("计算机学院欢迎您!"); string s3(""); 另一个明显的错误是 operator= 这里strcpy给个一个局部变量,有什么用? 2 楼改的对,strcpy(a,cl1.a); 一个隐患就是你的字符串只有50,最大49个byte内容, 很容易不够用。可能会出意想不到的错误。建议改大。 将来实际应用中希望使用 cstring 或 std::string 可避免容量问题。 最后,有个问题就是 s3=s1+s2 以后,如果调用 s1.display() 会发现,s1 被改变了! 这不合理。你看整数的加法,不会改加数的值的! string operator+(string &amp;cl1,string &amp;cl2) { char strtemp[200]; strcpy(strtemp, cl1.a); strcat(strtemp, cl2.a); return string(strtemp); } 减法存在同样的问题,自己改吧。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯