-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