-1

我使用Visual Studio試圖執行一個BIGINT上課的時候,我得到這個連接錯誤在函數_main引用\t解析外部符號:錯誤LNK2019使用defalt ARGS

錯誤LNK2019 解析的外部符號「類BigInt __cdecl bint(void)「(?bint @@ YA?AVBigInt @@ XZ)在函數中引用_main

奇怪的是,我只在使用默認參數時纔得到它。

下面是相關的代碼 頭文件:

#ifndef BIGINT 
#define BIGINT 

#pragma once 
#include <string> 
#include <iostream> 
using namespace std; 
class BigInt 
{ 
    string value; 
    size_t digits; 
public: 

    BigInt(const int val=0); 
    ~BigInt(); 
}; 

#endif 

源代碼:

BigInt::BigInt(const int val) :value(to_string(val)) 
{ 
    digits = value.size(); 
} 

BigInt::~BigInt() 
{ 
} 

主營:

int main() 
{ 
    BigInt bint(); 
    return 0; 
} 

不編譯,並給出了上面的錯誤。

但是這確實

int main() 
{ 
    BigInt bint(0); 
    cout << bint; 
    return 0; 
} 

任何想法是怎麼回事?謝謝。

+0

不要使用'()'。這是函數聲明 – xinaiz

+0

那我該用什麼? –

+0

@YairHalberstadt'BigInt bint;' –

回答

1

在第一個示例中,BigInt bint();具有誤導性。看起來您正在使用默認構造函數聲明BigInt類型的變量bint。但它看起來像是聲明瞭一個本地名爲bint的新函數,該函數不帶任何參數並返回BigInt。如果可以的話,編譯器將總是選擇將其解釋爲函數聲明。請參閱Most vexing parse

在第二個示例中,您提供參數0。由於0不是一種類型,因此該語句不能被解釋爲函數聲明。如果在第一個示例中刪除括號,它不再像函數聲明,並且避免了含糊之處。

+0

@感謝鏈接到最令人頭疼的解析。以前不知道。 – Sabuncu