提问人:Michael 提问时间:2/3/2014 最后编辑:Michael 更新时间:2/5/2014 访问量:242
具有简单类定义的 C++ 未解析的外部函数
C++ unresolved externals with simple class definition
问:
我不断收到一个无法理解的“来自 Visual Studio 2013 的 C++ 未解决的外部错误。非常感谢您到目前为止的帮助。我已将代码进一步简化为以下形式(但问题仍然存在):
main.cpp:
#include "Fibonacci.h"
using namespace std;
int main(void){
int RandInteger = 3;
Fibonacci Fib(RandInteger);
}
斐波那契
class Fibonacci{
public:
Fibonacci(int n=0);
protected:
int m_n0, m_n1, m_n;
};
斐波那契.cpp:
#include "Fibonacci.h"
Fibonacci::Fibonacci(int n){
m_n0 = 0;
m_n1 = 1;
m_n = n;
}
此代码在 Visual Studio 2013 中生成以下错误:
错误 2 错误 LNK1120:1 个未解决的外部问题 C:\Dropbox\todo\c++\Exam\Ex2\doesn't work\Exercise 2\fibo1\Fibo1\Debug\Fibo1.exe Fibo1 错误 1 错误 LNK2019:未解析的外部交易品种“public: __thiscall Fibonacci::Fibonacci(int)” (??0Fibonacci@@QAE@H@Z) 在函数 _main C:\Dropbox\todo\c++\Exam\Ex2\doesn't work\Exercise 2\fibo1\fibo1\main.obj Fibo1 中引用
我坚持,但是一旦我将 main.cpp 中的行替换为
Fibonacci Fib();
即我没有将整数传递给构造函数,一切正常(好吧,它编译并按预期执行任何操作)。
感谢您的帮助!我真的还是被困住了。
答:
函数应返回main
int
void main(void){
应该是
int main(){
编辑:感谢 otisonoza 在评论中指出一些编译器接受 main 的这个定义。除此之外,我看不出您系统中编译器错误的任何原因。您确定您完全按照编写的方式粘贴了代码吗?
另外,在你定义之后的随机刻度是怎么回事?main
}`
此外,.cpp 文件中的每个函数后不需要有分号:
Fibonacci::Fibonacci(int na){
m_n0 = 0;
m_n1 = 1;
m_n = 2;
};
int Fibonacci::getNext(int FnM1, int FnM2){
return FnM1 + FnM2;
};
可以是
Fibonacci::Fibonacci(int na){
m_n0 = 0;
m_n1 = 1;
m_n = 2;
}
int Fibonacci::getNext(int FnM1, int FnM2){
return FnM1 + FnM2;
}
评论
int
我终于找到了我的错误。事实证明,代码本身确实没有任何问题,但我以某种方式破坏了我的 VisualStudio 项目。我真的不是这些事情的专家,但以下是对我有用的东西:
- 在 Visual Studio 中创建新的空项目
- 将 CPP 文件(包括 *.h 文件)复制到新的项目文件夹中
- 通过右键单击项目并使用“添加新项目”将它们添加到此新项目中
我知道这是直接的方法,但我看不出我是如何破坏旧项目的(毕竟它应该足够简单)
感谢你们所有人 - 特别感谢 otisonoza 和 Angew,他们让我走上了正确的轨道,代码(在他们这边有效)没有错,但 Visual Studio 项目没有错。
评论
cpp