这个问题在这里已有答案:
错误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 回答
是不一样的
在前向声明中,您将按值获取参数,但在定义中它是通过引用 . 在声明和定义中保持参数类型相同 .
通常,当您看到这些链接器错误时,首先需要检查的是函数的声明和定义签名是否匹配 . 在这种情况下,显然不是 .
宣言:
定义:
看到不同?两者都应该是一样的 . 查看您的代码,看起来您应该将该版本保留在声明中 .
你有一个
prefix()
函数的原型:其签名与下面给出的实现不同:
请注意,在原型中,
nr1
和nr2
参数被传递 by value ;相反,在实现签名中,它们被传递 by reference (注意&
) .原型和实现签名都应该匹配 . 修复错误的一个 .
(注意:由于你不能将
main()
中的123
等文字作为非const
引用传递,我认为错误的是实现签名,即在实现签名中删除&
) .