首页 文章

未解析的外部符号[重复]

提问于
浏览
1

这个问题在这里已有答案:

错误1错误LNK2019:未解析的外部符号“bool __cdecl前缀(unsigned int,unsigned int)”(?前缀@@ YA_NII @ Z)在函数_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
    bool prefix(unsigned int nr1,unsigned int nr2);
    

    是不一样的

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

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

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

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

  • 1

    宣言:

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

    定义:

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

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

  • 1

    你有一个 prefix() 函数的原型:

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

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

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

    请注意,在原型中, nr1nr2 参数被传递 by value ;相反,在实现签名中,它们被传递 by reference (注意 & ) .

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

相关问题