簡體   English   中英

具有簡單類定義的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);

}

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:未解決的外部符號“ public: __thiscall Fibonacci :: Fibonacci(int)“(?? 0Fibonacci @@ QAE @ H @ Z)在函數_main C:\\ Dropbox \\ todo \\ c ++ \\ Exam \\ Ex2 \\中引用無效,\\ Exercise 2 \\ fibo1 \\ Fibo1 \\ main.obj Fibo1

我仍然堅持,但是一旦我將main.cpp中的行替換為

        Fibonacci Fib();

即我不將整數傳遞給構造函數,一切正常(好了,它編譯並沒有執行任何操作)。

謝謝你的幫助! 我真的還是被卡住了。

我終於找到了我的錯誤。 事實證明,代碼本身確實沒有錯,但是我已經以某種方式銷毀了VisualStudio項目。 我確實不是這些事情的專家,但是這對我有用:

  1. 在Visual Studio中創建一個新的空項目
  2. 將您的cpp文件(也都是* .h文件)復制到新項目文件夾中
  3. 通過右鍵單擊項目並使用“添加新項”將它們添加到該新項目中

我知道這是這樣做的直接方法,但是我看不到如何打破舊項目(畢竟應該足夠簡單)

謝謝大家-特別是感謝otisonoza和Angew,他們使我走上了正確的軌道,代碼(在它們的末端有效)並沒有錯,但Visual Studio項目卻沒有錯。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM