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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
#1

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

21.11.2011, 09:56. Просмотров 1916. Ответов 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(){/*тело метода*/}//здесь все норм
очевидно, что это из-за вложеной структуры...т.е. из-за того что он видимо не понимет что нужно возвращать...
подскажите как объявить, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 09:56     Помогите пожалуйста "error C2143:" и "error C4430:"
Посмотрите здесь:

C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";"
C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "строка"
C++ error C2143: синтаксическая ошибка: отсутствие ";" перед "using"
C++ Error C2440 невозможно преобразовать "void *" в "char *
Error C2361: пропуск инициализации "Height" из-за метки "default" C++
C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
407 / 500 / 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
2917 / 1346 / 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:"
Еще ссылки по теме:

Error C2440: =: невозможно преобразовать "void *" в "Node *" C++
C++ Error C2664: невозможно преобразовать из "wchar_t" в "const wchar_t *"
Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int" C++
C++ Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int"
C++ Ошибка "error C4430: missing type specifier" при работе с fstream

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru