错误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;
}
答案 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) {
^^^ ^^^
....
}
请注意,在原型中,nr1
和nr2
参数按值传递 ;相反,在实现签名中,它们通过引用传递(注意&
)。
原型和实现签名都应该匹配。修错了。
(注意:由于您无法将123
中的main()
等文字作为非const
引用传递,我认为错误的是实现签名,即删除{{1}在实现签名中。)