未定义的函数代码块引用

时间:2013-09-17 05:14:00

标签: c++ codeblocks multifile

的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。 我添加了目录;项目&gt;构建选项&gt;搜索目录并添加当前工作目录。 所有文件都在代码块中的一个控制台项目中

5 个答案:

答案 0 :(得分: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!

答案 1 :(得分:0)

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

改为例如

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

尝试&#34;项目/属性/构建目标选项卡&#34;。在那里你应该找到&#34;构建目标文件&#34;领域。在该文件中找到&#34; print.cpp&#34;然后单击复选框(现在编译器将构建print.cpp)。

关于CB中项目管理的一些有用信息 http://www.codeblocks.org/docs/main_codeblocks_en.html

答案 4 :(得分:0)

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