gpt4 book ai didi

c++ - 创建 C++ 链接列表时出现编译错误。体系结构 x86_64 : 的 undefined symbol

转载 作者:行者123 更新时间:2023-11-30 01:34:47 24 4
gpt4 key购买 nike

我正在尝试创建链接列表 RecipeBook。我需要创建一个方法 add,它接受 Recipe 对象参数并将其添加到链表的末尾

在我的 mac 上编译时我收到错误:

Undefined symbols for architecture x86_64:
"Recipe::Recipe()", referenced from:
RecipeBook::add(Recipe) in assign6-sendOnline-d41d53.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

当我在我的学校 linux 服务器上编译时,我收到:

/tmp/ccFZOs7z.o: In function `RecipeBook::add(Recipe)':
/home/cs/dbrinkley/csci133/assign6/assign6.cpp:30: undefined reference to `Recipe::Recipe()'
collect2: error: ld returned 1 exit status

我觉得我已经尝试了各种各样的东西,但不管是什么,我就是找不到。我不确定是我传递的对象参数不正确还是什么原因。

当我删除 main 中对 rb 的函数调用时,文件就会编译。此外,当我删除整个添加方法定义时,文件会编译。

#include <iostream>
#include <string>

class Recipe {
public:
std::string name;
std::string bodyText;

Recipe();
Recipe(std::string inName, std::string inBodyText){
name = inName;
inBodyText = bodyText;
};

Recipe *next, *prev;
};


class RecipeBook {
private:
Recipe *head, *tail;

public:
RecipeBook(){
head = NULL;
tail = NULL;
}

void add(Recipe r){
Recipe *temp = new Recipe;
*temp = r;
if(head == NULL){
head = temp;
tail = temp;
temp = NULL;
} else {
tail->next = temp;
temp->prev = tail;
tail = temp;
}
}
};



int main(){
RecipeBook rb;
Recipe r1("hamburger", "cook it");

rb.add(r1);

return 0;
}

最佳答案

错误说明

您声明 Recipe::Recipe() 存在于此处:

class Recipe {
public:
std::string name;
std::string bodyText;

Recipe();

但实际上您并没有定义它,因此编译器期望定义来自外部源(例如单独链接的 cpp 文件)。

解决这个问题

修复它真的很容易。只需添加一个定义:

class Recipe {
public:
std::string name;
std::string bodyText;

Recipe() {} // Recipe has a definition now

或者,更好的是,只默认定义:

class Recipe {
public:
std::string name;
std::string bodyText;

Recipe() = default;

默认定义将使构造函数变得微不足道,这使编译器更容易执行某些优化。

关于c++ - 创建 C++ 链接列表时出现编译错误。体系结构 x86_64 : 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55644630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com