С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/35: Рейтинг темы: голосов - 35, средняя оценка - 4.89
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
1

Ошибка C4430: missing type specifier - int assumed

04.08.2014, 17:43. Просмотров 6679. Ответов 17
Метки нет (Все метки)

Вот так простенький код
C++
1
2
3
4
5
6
7
8
#pragma once
#include "A.h"
class B
{
public:
    B(void);
    ~B(void);
};
C++
1
2
3
4
5
6
7
8
9
#pragma once
#include "B.h"
class A
{
public:
    A(void);
    virtual ~A(void);
    B b;
};
Ругается на переменную B b; Как тогда объявить переменную типа В?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2014, 17:43
Ответы с готовыми решениями:

С++ ошибка error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Помогите, как исправить данную ошибку. error C4430: missing type specifier -...

Error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\program files\microsoft visual studio 9.0\visual studio...

Ошибка "missing type specifier - int assumed" В шаблоне класса
#include<iostream> using namespace std; int i; template <typename T>...

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

Шаблон класса. Ошибка `missing type specifier`
Вот код: template <int value, typename type> class Class { public:...

17
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 875
Записей в блоге: 1
04.08.2014, 17:47 2
m0, вы хотите циклическое включение заголовочных файлов устроить? Не выйдет.
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 18:09  [ТС] 3
Окей, что мне делать?
0
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,950
04.08.2014, 18:19 4
Цитата Сообщение от m0 Посмотреть сообщение
Окей, что мне делать?
Выбросить одно включение и объявить класс
типа так
C++
1
2
3
4
5
6
7
8
9
#pragma once
class B;
class A
{
public:
    A(void);
    virtual ~A(void);
    B b;
};
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 875
Записей в блоге: 1
04.08.2014, 18:25 5
m0, или вообще убрать #include "A.h". Разве классу B класс A нужен? Если они используют что-то общее (typedef'ы, например), вынесите это общее в отдельный хэдер.
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 18:41  [ТС] 6
CyberSolver, Да нужен, я просто привел простой пример. Мне нужно чтобы у каждого класса была переменная с типом другого.
C++
1
2
3
4
5
6
7
8
9
#pragma once
#include "A.h"
class B
{
public:
    B(void);
    ~B(void);
    A* a;
};
C++
1
2
3
4
5
6
7
8
9
#pragma once
#include "B.h"
class A
{
public:
    A(void);
    virtual ~A(void);
    B* b;
};
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error 3 error C2143: syntax error : missing ';' before '*'
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 875
Записей в блоге: 1
04.08.2014, 18:43 7
m0, тогда не парьтесь и объявите их в одном месте.
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 20:09  [ТС] 8
CyberSolver, Ну это я здесь два простеньких класса привел, на самом деле у меня два больших класса, и мне нужна такая переменная в каждом из них.
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 875
Записей в блоге: 1
04.08.2014, 20:18 9
m0, ну если они содержат по указателю друг на друга, и вы непременно хотите разделения - на напишите что-ли отдельный заголовочник
C++
1
2
class A;
class B;
и включите в оба.

Если не указатели, а сами - придется пихать в один.
1
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 20:20  [ТС] 10
CyberSolver, Про отдельный заголовочный файл не понял
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 875
Записей в блоге: 1
04.08.2014, 20:24 11
Цитата Сообщение от CyberSolver Посмотреть сообщение
Если они используют что-то общее (typedef'ы, например), вынесите это общее в отдельный хэдер.
m0, я про это. Пусть в отдельном хэдере просто будет
Цитата Сообщение от CyberSolver Посмотреть сообщение
C++
1
2
class A;
class B;
раз пошла такая пьянка. Я же не знаю вашей задачи, так что могу советовать только общее: брось каку и так далее.
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 20:27  [ТС] 12
Фак, есть какая-то книга где в качестве примера проектируется реальное приложение? желательно через тестирование. А то учебные примеры слишком унылы.
0
uglyPinokkio
326 / 229 / 55
Регистрация: 30.05.2014
Сообщений: 682
04.08.2014, 20:33 13
Это называется forward declaration

http://www.developingthefuture.net/forward-declarations-in-c/
1
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,950
04.08.2014, 20:39 14
Цитата Сообщение от CyberSolver Посмотреть сообщение
Если не указатели, а сами - придется пихать в один
только указатели иначе не скомпилится
например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A;
class B;
class A
{
public:
 int i1;
 B b;
}
 
class B
{
public:
 int i1;
 A a;
}
каков размер объектов данных классов?
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 20:41  [ТС] 15
ValeryS, да большой, поле класса будет содержать массив координат вершин. А их до миллиона может быть и в каждой x, y, z -int;
0
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,950
04.08.2014, 20:49 16
Цитата Сообщение от m0 Посмотреть сообщение
ValeryS, да большой,
я не про большой
смотри на мой пример
чтобы создать объект класса A нужно выделить память под инт и под класс B
значит высчитываем размер B нам нужно память для итн и под класс A
рассчитываем размер класса A нужно выделить память под инт и под класс B
ну и так далее
я уж не говорю что
при такой записи
C++
1
2
3
4
5
6
7
class B;
class A
{
public:
 int i1;
 B b;
}
компилятор ничего не знает про класс B, кроме того что он будет где то описан
так что при перекрестном использовании только указатели, хотя бы в одном из них
1
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 146
04.08.2014, 20:50  [ТС] 17
ValeryS, Так и сделаю, по другому видимо никак.
0
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,950
04.08.2014, 20:51 18
Цитата Сообщение от m0 Посмотреть сообщение
содержать массив координат вершин. А их до миллиона может быть и в каждой x, y, z -int;
итого 12 мегабайт, на стеке такое не выделишь, только в куче
значит указатели
0
04.08.2014, 20:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2014, 20:51

Missing type specifier
Добрый день. Подскажите, пожалуйста, как исправить данную ошибку. Пишет...

Ошибка C4430: отсутствует спецификатор типа - предполагается int
error C4430: отсутствует спецификатор типа - предполагается int. Примечание....

Incomplete type used in nested type specifier - Итерация по списку аргументов
Здравствуйте! Пытаюсь написать утилитарную структуру для применения...


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

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

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