1

错误 1 ​​错误 LNK2019: 函数 _main c:\Users\Work\documents\visual studio 2012\Projects\Book\ 中引用的未解析的外部符号“bool __cdecl prefix(unsigned int,unsigned int)”(?prefix@@YA_NII@Z) Project5\Project5\Source.obj Project5

错误 2 error LNK1120: 1 unresolved externals c:\users\work\documents\visual studio 2012\Projects\Book\Project5\Debug\Project5.exe 1 1 Project5

我只是..我什至不知道我要问你们什么。我该如何解决?

这是代码:

#include <iostream>
#include <string>
#include <vector>
#include <math.h>


using namespace std;

void citire(vector<unsigned int> myVector,int &nrElem);
bool prefix(unsigned int nr1,unsigned int nr2);

int main(){
    int nrElem={0};
vector<unsigned int> myVector;


//citire(myVector,nrElem);
cout << prefix(123,1234);

system("pause");
return 0;
}

void citire(vector<unsigned int> myVector,int &nrElem){
    cout << "NumarElemente=" ;  
    cin >> nrElem ;

    for(int i=0;i<nrElem;i++){
        unsigned int nrCitit;
        cout << "Elem #" << i+1 <<"=";
        cin >> nrCitit;
        myVector.push_back(nrCitit);
    };

    for(int i=0;i<nrElem;i++){
        cout << myVector.at(i);
    };
}

bool prefix(unsigned int &nr1,unsigned int &nr2){
    unsigned int nr1copy=nr1;
    unsigned int nr2copy=nr2;
    int digitsNr1 = 0; while (nr1copy != 0) { nr1copy /= 10; digitsNr1++; }
    int digitsNr2 = 0; while (nr2copy != 0) { nr2copy /= 10; digitsNr1++; }
    if ( nr2/_Pow_int(10,digitsNr2-digitsNr1)==nr1) {return true;}
    else return false;
}
4

3 回答 3

1
bool prefix(unsigned int nr1,unsigned int nr2);

不一样

bool prefix(unsigned int& nr1,unsigned int &nr2);

在前向声明中,您按值获取参数,但在定义中它是按引用。在声明和定义中保持参数类型相同。

未解析的外部符号“bool __cdecl 前缀(无符号整数,无符号整数)”

通常,当您看到此类链接器错误时,您需要检查的第一件事是函数的声明和定义签名是否匹配。在这种情况下,显然不是。

于 2013-08-13T16:55:42.600 回答
1

宣言:

bool prefix(unsigned int nr1,unsigned int nr2);

定义:

bool prefix(unsigned int &nr1,unsigned int &nr2){ ... }

看到不同?两者应该是一样的。查看您的代码,您似乎应该将版本保留在声明中。

于 2013-08-13T16:55:58.290 回答
0

你有一个函数原型prefix()

bool prefix(unsigned int nr1,unsigned int nr2);

它的签名下面给出的实现不同:

bool prefix(unsigned int &nr1,unsigned int &nr2) {
                        ^^^               ^^^
    ....
}

注意在原型中,nr1nr2参数是传值的;相反,在实现签名中,它们是通过引用传递的(注意&)。

原型和实现签名都应该匹配。修错一个。
(注意:由于您不能将 in 之类的文字123作为main()const引用传递,我认为错误的是实现签名,即在&实现签名中删除)。

于 2013-08-13T16:57:50.217 回答