2012-03-18 1 views
0

ошибки:C++: Оператор ошибка перегрузки: ожидаются неквалифицированный-идентификатор перед «&» лексем

g++ -Wall -Wextra -ansi -pedantic Testr.cc classE.cc classC.cc 
classE.cc:46:14: error: expected unqualified-id before '&'token 
classC.cc:46:14: error: expected unqualified-id before '&'token 

Линии компилятор имеет в виде:

classE classE::&operator%(classB &rhs){ 

Компилятор говорит о " & 'в выражении' classE :: & operator% '; Я бы так же быстро удалил амперсанд, но это задание (т. Е. Произвольные домашние задания). Я даже не уверен, что должен делать амперсанд. Подобные методы перегрузки операторов используют один и тот же контур без проблем, и я пришел с пустыми руками через Google и учебники.

Указание производного класса (classB.h является чисто виртуальным) в аргументах также не устраняет эти ошибки.

Поскольку другие аналогично определенные операторы работают без проблем, я считаю, что проблема заключается в реализации. Основная идея состоит в том, чтобы взять два объекта класса B (classC или classE) и перемежать строковую переменную, каждый из которых содержит один объект, возвращая объект типа lhs, содержащий переплетенную строку. Реализация класса действительно эффективно аналогична реализации класса C:

classC classC::&operator%(classB &rhs){ //Interleave two classB-derived objects, return object of lhs-type 
    string temp = rhs.str(), temp2 = restore(), result = ""; 
    int a = temp.size(), b = temp2.size(), max; 
    if (temp2.size() > temp.size()){ 
     max = temp2; 
    } 
    else{ 
     max = temp; 
    } 
    for (int i = 0; i < max; i++){ 
     if (i < a){ 
     result += temp2[i]; 
     } 
     if (i < b){ 
    result += temp[i]; 
    } 
} 
return classC(result); 
} 

Извините, я здесь совершенно новый; Я понятия не имею, как добавить номера строк в кодовые блоки = - \

Спасибо за чтение и рассмотрение моей проблемы. = -)

EDIT: Я боялся, что это будет смущающе глупая ошибка; меняя линию на классE & классE :: оператор% (класс B & гг.) { открыл шлюзы для тонны новых ошибок. Хех, когда я подумал, что я нахожусь на C++. Спасибо, кучка, ребята. Я надеюсь, что все мои будущие вопросы будут такими же простыми.

ответ

2
classE classE::&operator%(classB &rhs) 

Не является синтаксически действующим.


Если перегрузка оператора % все, что вам нужно:

classE classE::operator%(classB &rhs) 

Если ваше намерение вернуть ссылку, вам необходимо:

classE& classE::operator%(classB &rhs) 
    ^ ^^^^^
     |  | | | | | 
     |  | | | | | 
    return type | | keyword| function arguments 
       | |  | 
      class name operator being overloaded 
        | 
       Scope resolution operator 
0

Вы, кажется, чтобы сделать ошибку при написании реализации, поскольку подпись classE classE::&operator%(classB &rhs); недействительна C++-код , Декларация является чем-то вроде этого в classE:

classE &operator%(classB & rhs); 

Это объявление operator % иметь тип возвращаемого classE &. Вы могли бы найти более ясно, чтобы написать ее как

classE& operator%(classB & rhs); 

Так реализация должна выглядеть на самом деле

classE & classE::operator%(classB &rhs){