代码之家  ›  专栏  ›  技术社区  ›  Michael harris

对函数代码块的未定义引用

  •  0
  • Michael harris  · 技术社区  · 11 年前

    主.cpp

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

    5 回复  |  直到 3 年前
        1
  •  2
  •   user142650 user142650    11 年前

    我认为您应该多阅读一些关于名称空间使用的内容。您在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!
    
        2
  •  0
  •   Pranav 웃 n1kkou    11 年前

    您应该得到更多的链接器错误,因为您使用 string 您的中没有任何命名空间 print.cpp 文件如果源文件没有编译,它就无法与链接,您将得到链接器错误。

    更改为例如。

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

    你呢 尝试链接从创建的对象文件 打印.cpp ?

        3
  •  0
  •   Kaz    10 年前

    我知道这很古老,但对于任何想解决这个问题的人来说,以下可能是你的解决方案。如果你有g++,请在项目下关注c++11->构建选项(无论如何都要检查您的选项),然后您 必须 选中那个框 全部的 您在项目中为清除错误而创建的文件。我也有那个烦人的未定义引用的东西,但现在它不见了!

        4
  •  0
  •   dmytro.poliarush    9 年前

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

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

        5
  •  0
  •   Charles    6 年前

    当处理C++中的字符串时,最好使用std::string,而您的代码似乎有问题,比如使用std::cout而不是普通cout。另一件需要注意的事情是链接您的文件,尤其是不同目录中的文件。您需要告诉代码块,要找到这个print.cpp,请转到build选项,然后转到搜索选项卡目录,指向print.cpp所在的位置另一种方法是只构建一个包含main.cpp的项目,然后将print.cpp类添加到当前项目中。我希望这会有所帮助