未定义的函数代码块引用

问题描述 投票:0回答:5

main.cpp中

#include <iostream>
#include <string>
using namespace std;

void echo(string);

int main()
{
    echo("hello");
    cout << "Hello world!" << endl;
    return 0;
}

print.cpp

#include <iostream>
#include <string>
void echo(string code){
   cout << code;
}

在代码块12.11中编译代码后,它给了我错误:

undefined reference to `echo(std::string)

我使用的是Windows 7 x64。我添加了目录;项目>构建选项>搜索目录并添加当前工作目录。所有文件都在代码块中的一个控制台项目中

c++ codeblocks multifile
5个回答
2
投票

我相信你应该阅读更多关于名称空间使用的内容。你缺少print.cpp中的std。

通常,在开始学习cpp或掌握语言时,您应该总是尝试编写类的全名以及命名空间。最终通过练习和一些疏忽(如现在),您将了解为什么您真正需要它们。简而言之,命名空间很棒:

  • 在多个文件上编写代码时
  • 将代码划分为单独的块。

此外,using namespace std;应该在cpp文件中使用(否则标题会被破坏。

无论如何,尝试将您的代码更改为:

#include <iostream>
#include <string>
void echo(std::string code){
    std::cout << code;
}

那么你的结果将如下所示:

 > g++ main.cpp print.cpp -o a.out

 > ./a.out
helloHello world!

0
投票

您应该获得的不仅仅是链接器错误,因为您在string文件中使用的print.cpp没有任何名称空间。如果该源文件未编译,则无法链接,您将收到链接器错误。

改变它e。

void echo(std::string code) { ... }

你会尝试链接从print.cpp创建的目标文件?


0
投票

我知道这是旧的,但对于任何想要解决此问题的人来说,以下内容可能是您的解决方案。如果你有g ++跟随c ++ 11在project-> build options下(无论如何都要检查你的选项),那么你必须检查你在项目中为文件制作的所有文件的框,以便清除错误。我也有那个烦人的未定义参考的东西,但现在它已经消失了!


0
投票

尝试“项目/属性/构建目标选项卡”。在那里你应该找到“构建目标文件”字段。在该文件中找到“print.cpp”并单击复选框(现在编译器将构建print.cpp)。

关于CB qazxsw poi项目管理的一些有用信息


0
投票

当处理C ++中的字符串时,最好起诉std :: string并且你的代码似乎是错误的更改,比如使用std :: cout而不是plain cout,另外需要注意的是将文件链接到不同目录中的文件你需要告诉代码块是通过转换构建选项来找到这个print.cpp并转到搜索选项卡目录并指向print.cpp是另外一种方法,另一种方法是构建一个具有main的项目。 cpp然后将print.cpp类添加到当前项目中我希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.