【发布时间】: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>模板的唯一地方是 main.cpp。但是它知道如何为int实例化它的唯一地方是channel.cpp。 -
看起来你有一个模板类
gsc::Channel,它声明了几个成员Channel、put、get,它们的定义在main.cpp中是不可见的。您是否将模板定义放在源文件中?
标签: c++ gcc compilation compiler-errors g++