2014-10-02 5 views
0

EDIT: необходимость удалить пост - проблема была тривиальной (опечатка) и не будет какой-либо помощи другимПолучение нерешенной внешней ошибки, когда оператор перегрузки, даже после определения всех методов

Я получаю errorLNK2019, неразрешенная внешняя ошибка при попытке использовать перегрузку оператора в одном из моих файлов cpp. Я посмотрел на все, и многие люди смогли исправить эту проблему, убедившись, что каждый свой метод определяет в своих прототипах классов.

Я думаю, что это должен сделать много с моим дизайном проекта, чтобы быть честным, но я действительно не могу точно определить, почему эта ошибка происходит

Вот код:

//a.cpp 
// 
// ... skipped all code to bottom to where i modified it 
//OVERLOADED FUNCTIONS 
int operator+(const int n, const a& entry){ 
    return n + entry.getTime(); 
} 
ostream& operator<<(ostream & out, const a& entry){ 
    out << entry.getTitle() << " by " << entry.getArtist() 
     << " (" << entry.getTime() << ") "; 
    return out; 
} 

//********************************************************* 
// a.h 
//... only posting what I changed 
// 
// Inside the class.. 

class a 
{ 
public: 
    friend ostream& operator<<(const ostream& out, const a& entry); 
    friend int operator+(const int n, const a& entry); 
//.. 
//.. SNIPPED 
//.. 
} 

Я бегу в ошибку, когда я пытаюсь вывести ab-объект в методе show().

//b.cpp 
#include "b.h" 

b b::etnsl(const int &indexOfItemToAdd) const{ 
    if (originalObjects != NULL && indexOfItemToAdd >= (*originalObjects).size()){ 
     throw "Index out of bounds"; 
    } 
    b x(originalObjects); 
    vector<int> *iCopy = x.getIndices(); 
    (*iCopy) = indices; 
    iCopy->push_back(indexOfItemToAdd); 
    x.setSum(sum + (*originalObjects)[indexOfItemToAdd].getTime()); 
    return x; 
} 

void b::show() const{ 
    cout << " Item at loc " << "0x" << this << ":" << endl; 
    //int j = indices.size(); 
    //if (j == 0) 
    if (size == 0) 
     cout << " Empty item." << endl; 
    else{ 
     for (int i = 0; i < size; i++) //ERROR IN LOOP 
     cout << " Index " << indices[i] << " : " << (*originalObjects)[indices[i]] << endl; 
    } 
} 
int b::getSum() const{ 
    return sum; 
} 
void b::setSum(const int& num){ 
    sum = num; 
} 
vector<int>* b::getIndices(){ 
    return &indices; 
} 

//********************************************************* 
//b header class 

#ifndef B_H 
#define B_H 

#include <iostream> 
#include <vector> 
#include "a.h" 
using namespace std; 

class b{ 
private: 
    int sum, size; 
    vector <a> *originalObjects; 
    vector <int> indices; 
public: 
    b(vector<a> *orig = NULL) //counts as 2 constructors: default and a custom one. 
     : sum(0), originalObjects(orig), size(indices.size()) { 
    } 
    b etnsl(const int &indexOfItemToAdd) const; 
    void show() const; 
    int getSum() const; 
    void setSum(const int& num); 
    vector<int> *getIndices(); 
}; 

#endif 

ответ

2
ostream& operator<<(ostream & out, const iTunesEntry& tune) 

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

ostream& operator<<(const ostream& out, const iTunesEntry& entry); 
//     ~~~~~ 

внутри класса iTunesEntry (метод друга)

И const не следует использовать, как вы должны изменить out объект ostream

+0

мой бог большое вам спасибо. я не мог поймать это – kamoussa

+2

И неправильно иметь 'const ostream &', если вы собираетесь написать ему ... –

+0

@moussashi Я думаю, вы не можете удалить его сейчас, так как вы получили ответ с + ve голосов, однако я буду голосуйте за закрытие его как простую типографскую ошибку. – P0W