Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

For(auto const& val : stime) .cpp(47) : error C2143: синтаксическая ошибка: отсутствие "," перед ":" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdexcept&gt; #include &lt;locale&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; #include...

Error C2143: синтаксическая ошибка: отсутствие ";" перед "строка" - C++
#include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(...

Ошибка в тестовом примере: "Error 1 error C2143: syntax error : missing ';' before 'if'" - C++
#include&lt;iostream&gt; using namespace std; int main(){ int x, a = 0, b = 10; (cin &gt;&gt; x).get(); while (x){ int c = x % 10; ...

Error C2143: синтаксическая ошибка: отсутствие ";" перед "*" - C++
Вот текст класса, где собственно говоря вылезает ошибка. Где я мог пропустить &quot;;&quot; никак не пойму. Причем предыдущая строка &quot;Field* field;&quot;...

error C2143: синтаксическая ошибка: отсутствие "]" перед ";" - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; using namespace std; // Программа int main () { setlocale (LC_ALL,...

Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" - C++
Программа Microsoft Visual C++ 2010 // площадь прямоугольника.cpp: главный файл проекта. #include &lt;stdafx.h&gt; #include &lt;stdio.h&gt; ...

10
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
21.11.2011, 10:03 #2
я не силен в таких вопросах, но первое что приходит на ум - сделать 2 класса и подружить их друг с другом вместо структуры
0
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:19  [ТС] #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* //вполне себе как тип воспринимается)
0
Bers
Заблокирован
21.11.2011, 10:20 #4
Что это?

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

Вы считаете, это нормально, вот так делать?
0
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:23  [ТС] #5
C++
1
et* joni(et*,et*);//метод реализующий рекурсивный алгоритм объединения деревьев
да, считаю нормальным, ибо в задании не указано, что мне должны нравится предложенные алгоритмы...
0
Bers
Заблокирован
21.11.2011, 10:32 #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 минуту
возможно компилятор просто не может понять - звёздочка там, это умножение, или указатель
0
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:33  [ТС] #7
спасибо, посмотри сообщение чуть повыше 13:19...
пологаю тема закрыта)
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
21.11.2011, 10:37 #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; // тут ашыпка, хэлп
}

0
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
21.11.2011, 10:45  [ТС] #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; // тут ашыпка, хэлп, а не тут
}

это то, что каксается формальной грамматики...
0
Сыроежка
Заблокирован
21.11.2011, 14:29 #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;}//вот здесь ошибка
0
Bers
Заблокирован
21.11.2011, 14:32 #11
Цитата Сообщение от Сыроежка Посмотреть сообщение
так как класс bst определен как не шаблонный.
Я понял так, что он просто скопипастил неправильно) Забыл шапку)
0
21.11.2011, 14:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 14:32
Привет! Вот еще темы с ответами:

error C2143: синтаксическая ошибка: отсутствие ";" перед "using" - C++
Сколько смотрю в код, не могу найти где я ошибку совершил, возможно вы поможете) main.cpp #include &lt;iostream&gt; #include &quot;queue.h&quot; ...

Ошибка "error C4430: missing type specifier" при работе с fstream - C++
Добрый день. Работаю над сохранением и загрузкой файлов. Для этого использую библиотеку &lt;fstream&gt;, создаю обьект класса fstream. А...

Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int" - C++
// training.cpp: определяет точку входа для консольного приложения. // #include &lt;stdio.h&gt; #include &quot;stdafx.h&quot; /* печать таблицы...

Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int" - C++
Добрый день. Я получил задание написать программку на c++. КНИГА: • фамилия и инициалы автора ; • название книги; • год издания...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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