Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите, уже сломал голову! Type name expected 
V
    Опции темы
stjoker
Дата 11.7.2011, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.7.2011

Репутация: нет
Всего: нет



Есть два класса: список и элемент списка. При компиляции вылетают следующие ошибки:

[BCC32 Error] Chain.h(10): E2303 Type name expected
[BCC32 Error] Chain.h(10): E2139 Declaration missing ;
[BCC32 Error] Chain.h(15): E2238 Multiple declaration for 'Chain::Point'
[BCC32 Error] Chain.h(10): E2344 Earlier declaration of 'Chain::Point'
[BCC32 Error] Chain.h(15): E2139 Declaration missing ;
[BCC32 Error] Chain.h(19): E2293 ) expected

Попытка использования list из STL дала только:

[BCC32 Error] Unit1.cpp(19): E2401 Invalid template argument list

Что делать?

Список:

Код

#ifndef CHAINH
#define CHAINH 1
#include "Shape.h"
class Chain {
private:
    static Chain *last;
    Chain *next;
    Chain *previous;
public:
    Point *pPoint;
    static Chain *begin;
    static int Count();
    static Point* GetItem(int _n);
    static int DeleteLastItem();
    Chain(Point *_pPoint);
};
#endif


И элемент списка, который наследуют ещё три класса:
Код

#ifndef SHAPESH
#define SHAPESH 1
//---------------------------------------------------------------------------
class Point {
public:
    Point(double _x=0, double _y=0): x(_x), y(_y) {};
    virtual void Show(){}
    virtual void Move(double _x, double _y) {x+=_x; y+=_y;}
    virtual void Rotate(double _angle) {};
    virtual void Resize(double _n) {};
protected:
    double x, y;
};

class Circle : public Point { 
public:
    Circle(double _x, double _y, double _r): Point(_x, _y), r(_r) {};
    void Show();
    void Resize(double _n) {r*=_n;}
protected:
    double r;
};

class Rectangle : public Point {
public:
    Rectangle(double _x, double _y, double _a, double _b, double _angle): Point(_x, _y), a(_a), b(_b), angle(_angle) {};
    void Show();
    void Resize(double _n) {a*=_n; b*=_n;}
    void Rotate(double _angle) { angle=_angle; }
protected:
    double a, b, angle;
};

class Square : public Rectangle { 
public:
    Square(double _x, double _y, double _a, double _angle) : Rectangle(_x, _y, _a, _a, _angle) {}
    void Show();
    void Resize(double _n) {a*=_n; b*=_n;}
};

#endif

PM MAIL   Вверх
volatile
Дата 11.7.2011, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



stjoker, У вас не включается #include "Shape.h"
1. Проверьте правильность имени. Shape.h далжна соответствовать второму файлу приведенному вами.
скорей всего надо Shapes.h (вершина телепатии!) сужу по #ifndef SHAPESH

2. Либо где-то определен макрос SHAPESH, и поэтому не включается "Shape.h"

PM MAIL   Вверх
borisbn
Дата 11.7.2011, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



stjoker, ещё пару замечаний:
1. 
Цитата(stjoker @  11.7.2011,  02:39 Найти цитируемый пост)
virtual void Show(){}

для виртуальных функций необязательно писать тело, можно просто указать =0, т.е. то, что она абстрактная
Код
virtual void Show() = 0;

2. У базового класса Point должен быть виртуальный деструктор, потому, что сейчас при таком коде
Код
Point * p = new Circle( 42, 42, 10 );
...
delete p;

произойдёт утечка памяти, т.к. вызовется только деструктор Point'а, а Circle'а - нет.
3. Для включения указателя на класс или на структуру в другой класс (в данном случае включение Point *pPoint; в класс Chain) необязательно включать h-ник, в котором он описан. Достаточно написать перед определением класса
Код
class Point;

А уже при использовании его методов с cpp-шнике необходимо будет include'ать Shape.h (или Shapes.h, как говорят телепаты smile)
4. Тебе этот велосипед класс Chain нужен исключительно в учебных целях ? Если нет, то несмотря на
Цитата(stjoker @  11.7.2011,  02:39 Найти цитируемый пост)
Попытка использования list из STL дала только

советую использовать std::list. Покажи, что у тебя там за ошибка... В смысле код из Unit1.cpp


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
stjoker
Дата 11.7.2011, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.7.2011

Репутация: нет
Всего: нет



Господа телепаты...) Класс Point описан именно в Shape.h. 
Добавление строчки
Код

class Point;

Результатов не дало.
Была попытка свалить всё в один файл, вплоть до того, что бы классы описывались рядом. Это не помогло, тот же набор ошибок. 
При использовании класса list
Код

std::list <Point> list1;

Видим:
[BCC32 Error] Unit1.cpp(19): E2401 Invalid template argument list

PM MAIL   Вверх
borisbn
Дата 11.7.2011, 23:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Может Point пересекается с каким-то системным именем... Переименуй свой класс, например в MyPoint. И выложи все исходники, относящиеся к проблеме - и h-ники и cpp-шники


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
stjoker
Дата 12.7.2011, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.7.2011

Репутация: нет
Всего: нет



Яхууууууууу! smile borisbn, ты гений))) переименовал класс и всё зашуршало! smile 
Самое забавное, что в Microsoft Visual Studio 2008 этот код прекрасно компилируется...
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(stjoker @  12.7.2011,  01:34 Найти цитируемый пост)
Самое забавное, что в Microsoft Visual Studio 2008 этот код прекрасно компилируется...

дык, если студию юзаешь, нафига тебе дебилдер ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
artsb
Дата 12.7.2011, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(stjoker @  12.7.2011,  01:34 Найти цитируемый пост)
Самое забавное, что в Microsoft Visual Studio 2008 этот код прекрасно компилируется... 

А что тут забавного? Совпадает только то, что связано с С/С++. А вот реализация компилятора и реализация различных классов (VCL/MFC) разные.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Кстати, посмотрел help по VCL - Point определён как
Код
extern PACKAGE tagPOINT __fastcall Point(int AX, int AY);

а т.к. у дебилдера в h-никах частенько встречается
Код
using namespace Classes; // или System

то нечего удивляться, что многие твои классы/структуры будут пересекаться с VCL-ными

Цитата(artsb @  12.7.2011,  08:28 Найти цитируемый пост)
Совпадает только то, что связано с С/С++

Да и то дааааааалеко не всё. Пример
Код

void foo( const int * p ) {}
std::vector< int > v;
foo( v.begin() );

такой код в дебилдере компилируется и работает, а в студии - нет.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
artsb
Дата 12.7.2011, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Ну я вообще про чисты С/С++ говорил. А STL это уже не то. Тут реализации могут отличаться.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
stjoker
Дата 12.7.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.7.2011

Репутация: нет
Всего: нет



Цитата

дык, если студию юзаешь, нафига тебе дебилдер ?

Я б рад в студии, но попросили эту муть конкретно на билдере реализовать...



Это сообщение отредактировал(а) stjoker - 12.7.2011, 12:54
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(artsb @  12.7.2011,  11:29 Найти цитируемый пост)
Ну я вообще про чисты С/С++ говорил. А STL это уже не то

Я, наверное, что-то пропустил ? STL - часть Си++, описание её интерфейсов входит в стандарт. Внутренняя реализация - согласен может быть какой хочешь, а интерфейсы должны полностью соответствеовать стандарту.
У меня, кстати, ещё примеров несоответствия - как у дурака пряников.
Вот ещё пример:
Код

template< typename Container >
/*typename*/ Container::iterator findSomething( Container & container );

в билдере компилируется, в студии (если не разремить) - нет.
Да, много чего ещё...

В принципе, если писать по стандарту, то поведение компиляторов более или менее одинаковое, но не разбираясь в тонкостях стандарта, и работая с билдером - будешь уверен, что пишешь правильно, хотя это - не так.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
artsb
Дата 12.7.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Это то понятно. Я просто всё это говорил к тому, что stjoker в Билдере, скорее всего, писал с использованием VCL, с которым и возникают конфликты (т.к. там целая гора разнообразных классов). В студии же, если он не использовал MFC, конфликтов быть не должно.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
borisbn
Дата 12.7.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



> В студии же, если он не использовал
MFC, конфликтов быть не должно.

Где тут смайлик с зелёным человечком, которого тошнит?

MFC ещё кто-нить использует???

Ответьте на вопрос все, плиз. Не создавать же для этого тему, тем более, что ТС, вроде, удовлетворён smile  


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
artsb
Дата 12.7.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(borisbn @  12.7.2011,  20:46 Найти цитируемый пост)
MFC ещё кто-нить использует???

Ага  smile  Вот, например, мой коллега делал для себя небольшое приложение. Для себя, но всё же...

Ну, да, ладно. Хватит флудить smile Разойдёмся мирно  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0910 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.