Официальный сайт студ.городка НГТУ
Программирование и БД » C++ - ошибка в синтаксисе 

#1  04.04.09 03:11

C++ - ошибка в синтаксисе

Уважаемые, пытаюсь сделать следующее:

Код::

template <class Data, class Key> class Tree {
public:

	class Element {
		Element operator = (Element operand2);
	};

};

template <class Data, class Key> Tree<Data, Key>::Element Tree<Data, Key>::Element::operator = (Element operand2) {
	return *this;
}

и VS2008 выдает следующее:
error C2143: syntax error : missing ';' before 'Tree<Data,Key>::Element::='Error
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
fatal error C1903: unable to recover from previous error(s); stopping compilation

при том была замечена следующая закономерность:
если я пытаюсь описать метод шаблона Tree, который бы возвращал обьект шаблона Element или его ссылку, во вылезает первые две ошибки, приведенные выше.

Буду рад Вашей помощи!

пс

уж очень бы не хотелось operator = описывать инлайном...

Исправлено voropay (04.04.09 03:59)

Offline

#2  04.04.09 13:44

Re: C++ - ошибка в синтаксисе

Возвращаемого результата уж точно не хватает.
А с шаблонами я совсем мало работала, но помню, что почему-то приходилось описывать все функции класса внутри описания класса. Не получалось вынести реализацию функций наружу. Ну я думаю, что наверно я тогда всё-таки неправильно делала... Тоже интересно послушать мнение уважаемых :)

Offline

#3  04.04.09 19:53

Re: C++ - ошибка в синтаксисе

Код::

template <class Data, class Key> Tree<Data, Key>::Element Tree<Data, Key>::Element::operator = (Element operand2) {
	return *this;
}

так вот же возвращаю...
Tree<Data, Key>::Element

М, я нашел частичное решение проблемы.

Кроме перегрузки этого оператора, у меня еще была куча методов, которые я не стал сдесь публиковать. И в одном из них я поставил лишнюю скобку. После исправления ошибки проект собрался.
Но вот как реализовать что-то вроде этого:

Код::

template <class Data, class Key> Tree<Data, Key>::Element Tree<Data, Key>::method() {
	return this->element;
}

так и не понял.
Может быть кто-то поделится своим опытом...

Исправлено voropay (04.04.09 19:57)

Offline

#4  04.04.09 22:00

Re: C++ - ошибка в синтаксисе

voropay написал(а):

уж очень бы не хотелось operator = описывать инлайном

религия мешает?

tree.h

Код: c:

#pragma once
 
#include <iostream>
 
using namespace std;
 
template<class A, class B>
class tree
{
public:
	class Element {};
	Element element;
	Element metod();
};


test.cpp

Код: c:

#include "tree.h"
 
template<class A, class B>
typename tree<A, B>::Element tree<A, B>::metod()
{
	cout<<"done"<<endl;
	return element;
}
 
int main()
{
	tree<int, char> a;
 
	a.metod();
 
	return 0;
}

Offline

#5  04.04.09 22:49

Re: C++ - ошибка в синтаксисе

Matrim, а почему typename tree<A, B>::Element а не class tree<A, B>::Element ?

Offline

#6  05.04.09 10:07

Re: C++ - ошибка в синтаксисе

Лис@ написал(а):

а почему typename tree<A, B>::Element а не class tree<A, B>::Element

потому что это будет попытка переопределить класс Element, а не реализовать его метод metod()

Offline

#7  05.04.09 17:00

Re: C++ - ошибка в синтаксисе

"религия мешает?" - именно по этому

Matrim - для меня было удивлением, что в VS2008 стало можно реализацию шаблонов осуществлять в нескольких файлах.
Поясните еще раз, только поподробней, когда надо использовать typename?

Исправлено voropay (05.04.09 17:02)

Offline

#8  05.04.09 17:57

Re: C++ - ошибка в синтаксисе

voropay, тогда лучше писать на ассемблере сразу, потому что будет функция инлайновой или нет решает компилятор :)

voropay написал(а):

для меня было удивлением, что в VS2008 стало можно реализацию шаблонов осуществлять в нескольких файлах

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

Offline

Программирование и БД » C++ - ошибка в синтаксисе 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.067 сек.
Выполнено 14 запросов.