未解决的外部符号

时间:2013-08-13 16:54:12

标签: c++ external

  

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

     

错误2错误LNK1120:1未解决   外部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;
}

3 个答案:

答案 0 :(得分:1)

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

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

在前瞻性声明中,您将按值获取参数,但在定义中它是参考。在声明和定义中保持参数类型相同。

  

未解析的外部符号“bool __cdecl前缀(unsigned int,unsigned int)”

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

答案 1 :(得分:1)

声明:

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

定义:

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

看到区别?两者都应该是一样的。查看您的代码,看起来您应该将该版本保留在声明中。

答案 2 :(得分:0)

prefix()函数有原型

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

的签名与以下给出的实现不同

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

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

原型和实现签名都应该匹配。修错了。
(注意:由于您无法将123中的main()等文字作为非const引用传递,我认为错误的是实现签名,即删除{{1}在实现签名中。)