This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(34个答案)
在11个月前关闭。
第一次使用堆栈溢出。
我正在尝试练习面向对象的抽象和接口(interface)。我一直无法使程序进行编译,我的程序如下。
main.cpp
Spells.h
Spell.cpp
每次我尝试编译main.cpp时,都会得到:
以下链接似乎描述了大多数问题。
https://askubuntu.com/questions/902857/error-tmp-ccob6cit-o-in-function-main-example-c-text0x4a
该人员似乎正在使用标准库,我想我只是尝试使用同一目录中的单个文件。
在上课之前,我曾经一起使用过多个文件,但是还没有遇到这个问题。我仍然可以使这些文件进行编译和执行。
使文件相互包含是否犯了错误?我应该使用其他形式的gcc编译命令吗?
(34个答案)
在11个月前关闭。
第一次使用堆栈溢出。
我正在尝试练习面向对象的抽象和接口(interface)。我一直无法使程序进行编译,我的程序如下。
main.cpp
#include "Spells.h"
#include <iostream>
int main()
{
spell MagicalSpell;
std::cout << "Hello World!\n";
}
Spells.h
#pragma once
class spell {
private:
int EnergyCost;
public:
spell();
~spell();
void SpellEffect();
};
Spell.cpp
#include "Spells.h"
#include <iostream>
spell::spell() {
EnergyCost = 0;
}
spell::~spell() {
}
void spell::SpellEffect(){
std::cout << "woosh" << std::endl;
}
每次我尝试编译main.cpp时,都会得到:
g++ main.cpp -lcrypt -lcs50 -lm -o main
/tmp/ccnXk1TN.o: In function `main':
main.cpp:(.text+0x20): undefined reference to `spell::spell()'
main.cpp:(.text+0x3f): undefined reference to `spell::~spell()'
main.cpp:(.text+0x64): undefined reference to `spell::~spell()'
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'main' failed
make: *** [main] Error 1
以下链接似乎描述了大多数问题。
https://askubuntu.com/questions/902857/error-tmp-ccob6cit-o-in-function-main-example-c-text0x4a
该人员似乎正在使用标准库,我想我只是尝试使用同一目录中的单个文件。
在上课之前,我曾经一起使用过多个文件,但是还没有遇到这个问题。我仍然可以使这些文件进行编译和执行。
使文件相互包含是否犯了错误?我应该使用其他形式的gcc编译命令吗?
最佳答案
您没有将Spell.cpp
传递给g++
。
使用您提供的选项,g++
将尝试编译其参数中列出的文件,并将最终的目标文件链接在一起以生成最终的可执行文件。但是,由于从未编译过Spell.cpp
,因此链接程序无法找到spell::spell
或spell::~spell
的定义。
最简单的解决方法是将所有翻译单元提供给g++
,例如
g++ main.cpp Spell.cpp -o main
09-07 23:54