我对CPP比较陌生,目前在我的第二堂课上,而且当我试图为我的类编译一个实验室时,我一直收到这个错误。我认为这可能与文件路径有关,但情况似乎并非如此,有人有什么建议吗?以下是代码:
#include <iostream>
#include <string>
using namespace std;
class personType {
private:
string firstName;
string lastName;
public:
void setName (string, string) {
cin >> firstName;
cin >> lastName;
}
const string getFirstName() {
return firstName;
}
const string getLastName() {
return lastName;
}
void print() {
cout << firstName << ", " << lastName << endl;
}
personType(string = "", string = "");
};
int main() {
personType John;
John.setName("John", "Doe");
John.getFirstName();
John.getLastName();
John.print();
return 0;
}下面是编译器错误消息:
未定义的建筑符号:"personType::personType(std::__1::basic_string,std::__1::basic_string)",引用自: CS200Lab1-022e17.o中的_main
ld:在体系结构x86_64中找不到符号
clang: error:链接器命令失败,退出代码1(使用-v查看调用)
因错误而完成的生成。
发布于 2022-01-23 23:56:08
问题是您的类有一个没有代码的方法名。
personType(string = "", string = "");错误消息只是告诉您有一个关于personType::personType(string,字符串的声明),但是它找不到这个方法的任何定义代码。您可以删除这一行,因为这是不必要的,编译器将自动添加一个没有参数的隐式构造函数。
或者,您也可以为此构造函数添加一组代码:
personType(string first = "", string last = "")
{
// code here
}也许你的意图是这样的:
#include <iostream>
#include <string>
using namespace std;
class personType {
private:
string _firstName;
string _lastName;
public:
void setName(string firstName, string lastName) {
_firstName = firstName;
_lastName = lastName;
}
const string getFirstName() {
return _firstName;
}
const string getLastName() {
return _lastName;
}
void print() {
cout << _firstName << ", " << _lastName << endl;
}
personType(string firstName = "", string lastName = "")
{
_firstName = firstName;
_lastName = lastName;
}
};
int main() {
personType John;
John.setName("John", "Doe");
John.getFirstName();
John.getLastName();
John.print();
return 0;
}发布于 2022-01-23 23:56:21
这只是一个声明(没有定义),这就是链接器抱怨的原因:
personType(string = "", string = "");也就是说,当链接开始时,您已经承诺在某个地方有一个定义,但是由于没有,链接就失败了。
这将是一个定义(和声明):
personType(string first = "", string last = "")
: // colon starts the member initializer list in constructors
firstName(first),
lastName(last)
{
// the function body can be empty
}发布于 2022-01-24 00:08:33
编译器有一个问题,因为构造函数缺少一个主体。
https://stackoverflow.com/questions/70827560
复制相似问题