Форум программистов, компьютерный форум CyberForum.ru

Помогите пожалуйста "error C2143:" и "error C4430:" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 09:56     Помогите пожалуйста "error C2143:" и "error C4430:" #1
Здравствуйте.
помогите пожалуйста понять как правильно сделать оъявление вот такой штуки...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class bst{
 
    struct et{
        et* l;
        et* r;
        K k;
        T v;
        et(et&);
        et(K&,T&);
        inline et*& link(bool);
 
    };
 
void del();
et* joni(et*,et*);
public:
/*что-то еще, но вопросов пока не возникло*/
};
 
template<typename T,typename K>
inline et*& bst<T,K>::et::link(bool variants){if(variants)return r;return l;}//вот здесь ошибка
 
template<typename T, typename K>
bst<T, K>::et* bst<T, K>::joni( et* a,et* b){/*тело метода*/}//вот здесь ошибка, кроме этого еще сообщение о том, что зависимое имя не является типом
 
template<typename T,typename K>
void bst<T,K>::del(){/*тело метода*/}//здесь все норм
очевидно, что это из-за вложеной структуры...т.е. из-за того что он видимо не понимет что нужно возвращать...
подскажите как объявить, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 09:56     Помогите пожалуйста "error C2143:" и "error C4430:"
Посмотрите здесь:

C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";"
C++ error C2143: синтаксическая ошибка: отсутствие ";" перед "using"
C++ Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1
C++ Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
21.11.2011, 10:03     Помогите пожалуйста "error C2143:" и "error C4430:" #2
я не силен в таких вопросах, но первое что приходит на ум - сделать 2 класса и подружить их друг с другом вместо структуры
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:19  [ТС]     Помогите пожалуйста "error C2143:" и "error C4430:" #3
C++
1
2
3
4
5
template<typename T, typename K>
typename bst<T,K>::et* bst<T, K>::joni
 
//вот отно в чем дело!
typename bst<T,K>::et* //вполне себе как тип воспринимается)
Bers
Заблокирован
21.11.2011, 10:20     Помогите пожалуйста "error C2143:" и "error C4430:" #4
Что это?

Цитата Сообщение от Глупец Посмотреть сообщение
et* joni(et*,et*);
Что вы пытались этой записью создать/объявить?

Вы считаете, это нормально, вот так делать?
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:23  [ТС]     Помогите пожалуйста "error C2143:" и "error C4430:" #5
C++
1
et* joni(et*,et*);//метод реализующий рекурсивный алгоритм объединения деревьев
да, считаю нормальным, ибо в задании не указано, что мне должны нравится предложенные алгоритмы...
Bers
Заблокирован
21.11.2011, 10:32     Помогите пожалуйста "error C2143:" и "error C4430:" #6
C++
1
2
template<typename T, typename K>
bst<T, K>::et* bst<T, K>::joni( et* a,et* b){/*тело метода*/}//вот здесь ошибка, кроме этого еще сообщение о том, что зависимое имя не является типом
попробуйте переписать так:
C++
1
2
template<typename T, typename K>
typename bst<T, K>::et* bst<T, K>::joni( et* a,et* b){/*тело метода*/}
Добавлено через 1 минуту
возможно компилятор просто не может понять - звёздочка там, это умножение, или указатель
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:33  [ТС]     Помогите пожалуйста "error C2143:" и "error C4430:" #7
спасибо, посмотри сообщение чуть повыше 13:19...
пологаю тема закрыта)
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.11.2011, 10:37     Помогите пожалуйста "error C2143:" и "error C4430:" #8
Попробуйте typedef'ить имена типов. Помогает не запутаться.

Не по теме:

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

Пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef int v;
 
struct e {
  v i;
  v* p;
};
 
struct z {
  e &ni
  e *nl;
};
 
int main(int argc, char *argv[]) {
  z x;
  x.nl->p = new v; // тут ашыпка, хэлп
}

Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:45  [ТС]     Помогите пожалуйста "error C2143:" и "error C4430:" #9
typedef int v;

struct e {
v i;
v* p;
};

struct z {
e &ni//нет ;
e *nl;
//нет конструктора...и нужен оязательно с парамтром, чтоб ссылку инициализировать...
};

int main(int argc, char *argv[]) {
z x;//да, и "тут ашипка, хелп"
x.nl->p = new v; // тут ашыпка, хэлп, а не тут
}

это то, что каксается формальной грамматики...
Сыроежка
Заблокирован
21.11.2011, 14:29     Помогите пожалуйста "error C2143:" и "error C4430:" #10
Цитата Сообщение от Глупец Посмотреть сообщение
Здравствуйте.
помогите пожалуйста понять как правильно сделать оъявление вот такой штуки...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class bst{
 
    struct et{
        et* l;
        et* r;
        K k;
        T v;
        et(et&);
        et(K&,T&);
        inline et*& link(bool);
 
    };
 
void del();
et* joni(et*,et*);
public:
/*что-то еще, но вопросов пока не возникло*/
};
 
template<typename T,typename K>
inline et*& bst<T,K>::et::link(bool variants){if(variants)return r;return l;}//вот здесь ошибка
 
template<typename T, typename K>
bst<T, K>::et* bst<T, K>::joni( et* a,et* b){/*тело метода*/}//вот здесь ошибка, кроме этого еще сообщение о том, что зависимое имя не является типом
 
template<typename T,typename K>
void bst<T,K>::del(){/*тело метода*/}//здесь все норм
очевидно, что это из-за вложеной структуры...т.е. из-за того что он видимо не понимет что нужно возвращать...
подскажите как объявить, пожалуйста.
Ваш код не должен компилироваться, так как класс bst определен как не шаблонный. Поэтому вы не можете к нему применять аргументы шаблона, как вы это деаете ниже

C++
1
2
template<typename T,typename K>
inline et*& bst<T,K>::et::link(bool variants){if(variants)return r;return l;}//вот здесь ошибка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 14:32     Помогите пожалуйста "error C2143:" и "error C4430:"
Еще ссылки по теме:

C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" C++
Ошибка "error C2446: :: нет преобразования "int" в "char *" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
21.11.2011, 14:32     Помогите пожалуйста "error C2143:" и "error C4430:" #11
Цитата Сообщение от Сыроежка Посмотреть сообщение
так как класс bst определен как не шаблонный.
Я понял так, что он просто скопипастил неправильно) Забыл шапку)
Yandex
Объявления
21.11.2011, 14:32     Помогите пожалуйста "error C2143:" и "error C4430:"
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru