具有简单类定义的C ++未解析外部

时间:2014-02-02 22:02:07

标签: c++ class linker unresolved-external

我一直从Visual Studio 2013中得到一个未解决的“来自C ++的未解决的外部错误。非常感谢您的帮助。我已经将代码更多地减少到以下形式(但问题仍然存在):

main.cpp中:

 #include "Fibonacci.h"

using namespace std;

int main(void){

    int RandInteger = 3;
    Fibonacci Fib(RandInteger);

}

Fibonacci.h

class Fibonacci{
    public:
        Fibonacci(int n=0);

    protected:
        int m_n0, m_n1, m_n;
};

Fibonacci.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 \不起作用\练习2 \ fibo1 \ Fibo1 \ Debug \ Fibo1.exe Fibo1 错误1错误LNK2019:函数_main C:\ Dropbox \ todo \ c ++ \ Exam \ Ex2 \ doesn中引用了未解析的外部符号“public:__thiscall Fibonacci :: Fibonacci(int)”(?? 0Fibonacci @@ QAE @ H @ Z)工作\练习2 \ fibo1 \ Fibo1 \ main.obj Fibo1

我坚持,但只要用

替换main.cpp中的行
        Fibonacci Fib();

即。我没有将整数传递给构造函数,一切正常(好吧它编译没有按预期做任何事情)。

感谢您的帮助!我真的还是被卡住了。

2 个答案:

答案 0 :(得分:1)

我终于找到了我的错误。事实证明代码本身并没有什么问题,但我已经以某种方式破坏了我的VisualStudio项目。我真的不是这些东西的专家,但这对我有用:

  1. 在Visual Studio中创建一个新的空项目
  2. 将您的cpp文件(所有这些也是* .h文件)复制到新项目文件夹
  3. 通过右键单击项目并使用“添加新项目”
  4. 将它们添加到此新项目中

    我知道这是直截了当的方式,但我看不出我是如何打破旧项目的(毕竟它应该很简单)

    感谢大家 - 特别感谢otisonoza和Angew,让我走上正确的轨道,代码没有任何问题(可以在他们的最后工作),但是使用Visual Studio项目。

答案 1 :(得分:0)

您的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;
}