Ошибка с перегрузкой оператора C++, в Visual Studio И XCode

Я работаю над присвоением C++ для класса, который хочет, чтобы я перегрузился">>" оператор. Я встречаюсь с ошибками, связывающимися и в Visual Studio 2005 и в XCode 3.2.2. Код C++ разделен на несколько файлов. Прототипы хранятся в overload.h, реализации хранятся в overload.cpp, и main() находится в overloadtester.cpp (хотя я не смог поместить что-либо связанное с этим новым перегруженным оператором в основном все же из-за ошибки. ниже код, который я добавил, прежде чем я начал получать (упомянутые ниже) ошибки

// overload.h  
// Class Name OverloadClass
#ifndef _OverloadClass_H
#define _OverloadClass_H
#include < string >  
using namespace std ;
class OverloadClass
{
public:
    // Constructors and methods
private:
    x_;
    y_;
};
istream& operator>> (istream& in, OverloadClass &p);
#endif



// overload.cpp
#include < iostream >
#include < string >
#include < sstream >
#include < istream >  
extern "C"
{
#include "DUPoint.h"
}  
using namespace std ;  

void OverloadClass::input()
{
    char leftParen;
    char comma ;
    cin >> leftParen >> x_ >> comma;

    char rightParen;
    cin >> y_ >> rightParen;
}



// Constructor and method implementations  
istream& operator>> (istream& in, OverloadClass &p)
{ 
    p.input();
    return in;
}

Ошибка я входил в XCode:

Link ./OverloadDirectory   
Undefined symbols: "operator>>(std:basic_istream >&, OverloadClass&)" referenced from: _main in overloadtester.o 
ld: symbol(s) not found collect2: ld returned 1 exit status

У меня нет доступа к компьютеру с VS в тот самый момент, надо надеяться, когда я делаю я могу отправить ошибку, которую я получаю от выполнения кода того IDE.

Отредактированный в ответ на запрос @Mark на большее количество деталей
Отредактированный в ответ на запрос @sbi на большее количество информации о входе ()

1
задан Greg Hewgill 18 September 2012 в 06:42
поделиться

4 ответа

Ошибка неопределенный символ является ошибкой компоновщика. Это означает, что когда вы связываете весь свой код в один исполняемый файл / библиотеку, компоновщик не может найти определение функции. Две основные причины этого - это забыть включить скомпилированный объект в библиотеку / исполняемый файл или ошибка при определении функции (скажем, вы объявляете void f (int &); , но реализуете void f (const int &) {} ).

Я не знаю ваших IDE (я никогда толком не разбирался в Xcode), но вы можете попробовать скомпилировать из командной строки: g ++ -o exe input1.cpp input2.cpp input3.cpp ...

1
ответ дан 2 September 2019 в 23:14
поделиться

Вы неправильно связываете overload.cpp. Убедитесь, что overload.cpp является частью вашего файла проекта в обоих случаях.

1
ответ дан 2 September 2019 в 23:14
поделиться

Вы неправильно добавили файлы в свой проект, поэтому компилятор не собирает его, а компоновщик не связывает его.

Причина, по которой я могу сказать, заключается в том, что вы опубликовали недопустимый код, который не будет компилироваться. Если бы вы добавили его в свой проект, компилятор потерпел бы неудачу, и вы бы никогда не добрались до этапа компоновки.

В Visual Studio, Вы можете добавить существующий файл в проект в меню Project в разделе Добавить существующий элемент...

0
ответ дан 2 September 2019 в 23:14
поделиться

Если перегрузка является классом шаблона, источник оператора должен находиться в заголовке.

Кроме того, имена должны быть полностью квалифицированы. То есть, если у вас есть какие-либо статические члены пространства имен/класса, к ним должно быть применено полное определение при определении реализации элемента.

0
ответ дан 2 September 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: