0

主文件

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

void echo(string);

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

打印.cpp

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

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

undefined reference to `echo(std::string)

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

4

5 回答 5

2

我相信你应该阅读更多关于命名空间使用的内容。您在 print.cpp 中缺少标准。

通常,在开始学习 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!
于 2013-09-17T05:54:12.277 回答
0

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

更改为例如

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

而且您确实尝试与从创建的目标文件链接print.cpp

于 2013-09-17T05:23:14.407 回答
0

我知道这已经过时了,但对于任何想要解决这个问题的人来说,以下可能是适合您的解决方案。如果您在项目-> 构建选项下遵循 c++ 11 的 g++(无论如何都要检查您的选项),那么您必须为您在项目中创建的所有文件选中该框以清除错误。我也有那个烦人的未定义引用,但现在它消失了!

于 2014-12-01T02:56:22.550 回答
0

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

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

于 2015-10-03T06:03:36.973 回答
0

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

于 2018-05-23T13:46:57.987 回答