Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2013, 08:47   #1
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию Ошибка в описание заголовочного файла в С++

Помогите пожалуйста. Не могу понять ошибку.

Код:
#pragma once
#include "stdafx.h"

class TWorld
{
public:
		TPlayingField* gameBoard;	
		TWorld();
		~TWorld();
};
Код:
#include "stdafx.h"

TWorld::TWorld(){
	gameBoard = new TPlayingField;
}

TWorld::~TWorld(){
	delete gameBoard;
}
Код:
#pragma once
#include "stdafx.h"

class TPlayingField{
public:
	int width;
	int height;
};

ОШИБКИ
l:\game\tworld.h(7): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
l:\game\tworld.h(7): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
l:\game\tworld.h(7): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 02.05.2013, 09:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А он больше ниче не пишет? Я думаю что проблема в том что класс TPlayingField описан ниже TPlayingField* gameBoard;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2013, 09:18   #3
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Код:
TPlayingField* gameBoard;
Откуда компилятор узнает, что это?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 02.05.2013, 09:23   #4
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Сделал так.

Код:
#include "stdafx.h"

class TPlayingField;
class TTimer;

class TWorld
{
public:
		TPlayingField *gameBoard;
		TTimer *Timer;
		TWorld();
		~TWorld();
};
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 02.05.2013, 12:59   #5
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

возможно я не прав, но у меня была подобная проблема из-за неумения компилятора ресолвить инклюди (файл А требует класс из файла В, который должен знать о классе в файле А)... решил так:
Код:
#if !defined(__WorkersList_cpp)
#define __WorkersList_cpp
#include "Worker.cpp" // вот это файл В, который требует  файл данный
#include "WorkersList.h"
...............................................
#endif
хотя решение "магическое" т.к. пришлось инклюдить не h, a cpp
GreenWizard вне форума Ответить с цитированием
Старый 02.05.2013, 13:40   #6
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

2 GreenWizard, зачем?
Цитата:
неумения компилятора ресолвить инклюди
Вы о чем? Ответ был дан выше, форвард определение.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 02.05.2013, 13:56   #7
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
2 GreenWizard, зачем?

Вы о чем? Ответ был дан выше, форвард определение.
а потом править 100500 файлов, добавляя в них форвард для одного нового класса? я не асс в С++, но такой расклад меня совсем не устраивает
гляньте код, например QT или стандартных подключаемых файлов... почти всюду используют условные директивы, чтоб не включать файл несколько раз и чтоб не плодить форварды
GreenWizard вне форума Ответить с цитированием
Старый 02.05.2013, 17:32   #8
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
почти всюду используют условные директивы, чтоб не включать файл несколько раз
Абсолютно согласен, только за, нигде не говорил обратного и тема, включая мой пост не об этом, не про это...

Цитата:
и чтоб не плодить форварды
Нет. Здесь не урок риторики. Смешивая правильный и неправильные выводы мало чего добьетесь.

Например, можно и такой код увидеть в папке инклуда компилятора:
Код:
// Forward Declarations
class uint_2;
class uint_3;
class uint_4;
class int_2;
class int_3;
class int_4;
class float_2;
class float_3;
class float_4;
class unorm_2;
class unorm_3;
class unorm_4;
class norm_2;
class norm_3;
class norm_4;
class double_2;
class double_3;
class double_4;
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Описание лабораторной работы. Помиогите сделать описание проги .какая формула что делает. Elimay25 Паскаль, Turbo Pascal, PascalABC.NET 1 01.03.2012 16:34
Ошибка файла CodeNOT Общие вопросы C/C++ 2 13.02.2011 23:50
Описание диалога в .rc синтаксическая ошибка alexandr_mn Win Api 8 13.08.2010 22:39
Как задать описание файла в Дельфи? ImmortalAlexSan Общие вопросы Delphi 3 06.05.2010 18:33
Как изменить описание ЕХЕ-файла и убрать дельфийскую иконку. TwiX Общие вопросы Delphi 7 03.03.2010 14:36