【问题标题】:Compiling C++: undefined reference编译 C++:未定义的引用
【发布时间】:2013-11-11 01:00:10
【问题描述】:

我对 C++ 很陌生,我正在尝试编译 my code。我使用的命令是g++ -o main --std=c++11 main.cpp channel.cpp。但是我收到以下错误消息:

/tmp/ccLuJs81.o: In function `main':
main.cpp:(.text+0x26): undefined reference to `gsc::Channel<int>::Channel()'
main.cpp:(.text+0x3a): undefined reference to `gsc::Channel<int>::put(int)'
main.cpp:(.text+0x4e): undefined reference to `gsc::Channel<int>::get(bool)'
collect2: error: ld returned 1 exit status

有人知道这里发生了什么吗?非常感谢!

【问题讨论】:

  • 请在此处包含相关代码。如果您希望他们帮助您,请不要让人们在互联网上追逐您应该提供的信息。
  • 好的,所以我对 g++ 了解的不够多,所以你的命令行我帮不了你。我可以说很明显它没有找到你的类函数定义。那么所有的声明和定义都正确吗?可能是链接器错误或代码中的某些问题,但您尚未发布。
  • 我现在没有时间写出完整的答案,所以这里有一个评论:问题是您在 .cpp 文件中定义模板函数。模板定义必须在它们被实例化的站点上可见,这通常意味着它们应该在标题中定义。事实上,编译器知道它需要为 ints 实例化 Channel&gt; 模板的唯一地方是 main.cpp。但是它知道如何int 实例化它的唯一地方是channel.cpp。
  • 看起来你有一个模板类gsc::Channel,它声明了几个成员Channelputget,它们的定义在main.cpp中是不可见的。您是否将模板定义放在源文件中?

标签: c++ gcc compilation compiler-errors g++


【解决方案1】:

您似乎在标头中声明了一个模板并在 C++ 文件中定义了它。这行不通。如果您没有在标头中定义模板,则需要在 C++ 文件中显式实例化它,例如,使用

template class gcs::Channel<int>;

在所有方法的定义之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2021-06-08
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多