2013-08-13 2 views
1

Ошибка 1 Ошибка LNK2019: неразрешенный внешний символ "BOOL __cdecl префикс (беззнаковое целочисленное значение без знака целое)" (префикс @@ YA_NII @ Z?) Упоминается в функции _Главная C: \ Users \ Work \ документы \ Visual Studio 2012 \ Projects \ Book \ Project5 \ Project5 \ Source.obj Project5неразрешенный внешний символ

ошибка 2 ошибка LNK1120: 1 неразрешенных : с внешних включений \ пользователи \ работа \ документы \ 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

Duplicate of [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить ?: Объявлено, но не определило переменную или функцию (тип возвращаемого значения, номер и типы параметров и соглашение о вызове не все точно согласитесь)] (http://stackoverflow.com/a/12574403/902497) –

ответ

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

не такой же, как

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

В передней декларации вперед, вы принимаете параметры по значению, но в определении оно по ссылке , Храните типы аргументов в декларации и определении.

неразрешенный внешний символ «BOOL __cdecl префикс (без знака INT, неподписанных INT)»

Обычно, когда вы видите такого рода ошибки компоновщика, то первое, что вам нужно проверить, является ли описание функции и подписи определения соответствия или нет. В этом случае, очевидно, нет.

+0

Каждый раз, когда кто-то отвечает на мои вопросы, я сам сталкиваюсь с ним. Спасибо. –

1

Декларация:

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

определение:

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

разницу? Оба должны быть одинаковыми. Посмотрев на свой код, похоже, что вы должны сохранить версию в объявлении.

0

У вас есть прототип для функции prefix():

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

который имеет подпись, которая отличается от реализации приведенной ниже:

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

Обратите внимание, что в прототипе , передаются параметры nr1 и nr2по значению; вместо этого в сигнатуре реализации они передаются по ссылке (обратите внимание на &).

Оба прототипа и сигнатуры реализации должны совпадать. Исправьте неправильный.
(Примечание: поскольку вы не можете передавать литералы, такие как 123, в main() как ссылка const, я считаю, что неправильная подпись реализации, т. Е.переместите & в подпись реализации).

Смежные вопросы