首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >另一个未为体系结构x86_64找到的定义符号

另一个未为体系结构x86_64找到的定义符号
EN

Stack Overflow用户
提问于 2022-01-23 23:43:24
回答 3查看 61关注 0票数 0

我对CPP比较陌生,目前在我的第二堂课上,而且当我试图为我的类编译一个实验室时,我一直收到这个错误。我认为这可能与文件路径有关,但情况似乎并非如此,有人有什么建议吗?以下是代码:

代码语言:javascript
复制
#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查看调用)

因错误而完成的生成。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-23 23:56:08

问题是您的类有一个没有代码的方法名。

代码语言:javascript
复制
personType(string = "", string = "");

错误消息只是告诉您有一个关于personType::personType(string,字符串的声明),但是它找不到这个方法的任何定义代码。您可以删除这一行,因为这是不必要的,编译器将自动添加一个没有参数的隐式构造函数。

或者,您也可以为此构造函数添加一组代码:

代码语言:javascript
复制
personType(string first = "", string last = "")
{
// code here
}

也许你的意图是这样的:

代码语言:javascript
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-23 23:56:21

这只是一个声明(没有定义),这就是链接器抱怨的原因:

代码语言:javascript
复制
personType(string = "", string = "");

也就是说,当链接开始时,您已经承诺在某个地方有一个定义,但是由于没有,链接就失败了。

这将是一个定义(和声明):

代码语言:javascript
复制
personType(string first = "", string last = "") 
    : // colon starts the member initializer list in constructors
    firstName(first), 
    lastName(last) 
{
    // the function body can be empty
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-24 00:08:33

编译器有一个问题,因为构造函数缺少一个主体。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70827560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档