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

C2061 ошибка, не могу понять что не так - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
14.03.2010, 16:56     C2061 ошибка, не могу понять что не так #1
Заголовочный файл: Forces.h
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
28
29
30
31
32
33
34
35
36
37
#ifndef _FORCES_
#define _FORCES_
 
#include "ParticleSystem.h"
 
// Абстрактный класс силы
class Force
{
protected:
    int * nofparticles; // Номера частичек, в массиве частиц, к которым применяется сила
    int n;
public:
    Force(int * numbers_of_particles, int number);
    void virtual ApplyForce(ParticleSystem & A) = 0;
};
 
// Сила гравитации
class GravityForce : public Force
{
private:
    double G;
public:
    GravityForce(int * numbers_of_particles, int number, double g) : Force(numbers_of_particles, number) { G = g; }
    void ApplyForce(ParticleSystem & A);
};
 
// Сила вязкости
class ViscousDragForce : public Force
{
private:
    double k;
public:
    ViscousDragForce(int * numbers_of_particles, int number, double kof) : Force(numbers_of_particles, number) { k = kof; }
    void ApplyForce(ParticleSystem & A);
};
 
#endif
Заголовочный файл: ParticleSystem.h
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
28
29
30
31
32
33
34
35
36
37
#ifndef _PARTICLESYSTEM_
#define _PARTICLESYSTEM_
#include "Forces.h"
 
// Класс элементарной частицы
typedef struct Particle
{
    double m;       // Масса частицы
    double * x;
    double * v;
    double * f;
} Particle;
 
// Класс системы частиц
class ParticleSystem
{
public:
    Particle * particles;
    int nParticles;
    double t;
    Force * forces;
    int nForces;
 
    ParticleSystem(Particle * pt, int np, double T, Force * Forces, int nf);    // Конструктор
    int ParticleDims() {return 6*nParticles;}                           // Размерность массива
    int ParticleGetState(double * dst) const;                               
    int ParticleSetState(const double * src);
    int ParticleDerivative(double * dst);
    int ClearForces();
    int CalculateForces();
    int EulerStep(double deltaT);
};
 
void ScaleVector(double *, double, int);
void AddVectors(double *, double *, int);
 
#endif
Вот листинг ошибок:
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\forces.h(14) : error C2061: syntax error : identifier 'ParticleSystem'
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\forces.h(24) : error C2061: syntax error : identifier 'ParticleSystem'
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\forces.h(34) : error C2061: syntax error : identifier 'ParticleSystem'
1>ParticleSystem.cpp
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\forces.h(14) : error C2061: syntax error : identifier 'ParticleSystem'
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\forces.h(24) : error C2061: syntax error : identifier 'ParticleSystem'
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\forces.h(34) : error C2061: syntax error : identifier 'ParticleSystem'
1>Forces.cpp
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\particlesystem.h(22) : error C2143: syntax error : missing ';' before '*'
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\particlesystem.h(22) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\particlesystem.h(22) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\virex\мои документы\visual studio 2008\projects\courseworkps\courseworkps\particlesystem.h(25) : error C2061: syntax error : identifier 'Force'

Помогите разобраться пожалуйста!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
14.03.2010, 17:00     C2061 ошибка, не могу понять что не так #2
typedef-то перед словом class зачем? убери
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
14.03.2010, 17:30  [ТС]     C2061 ошибка, не могу понять что не так #3
Убрал, но сути дела это не поменяло(((( Ошибки те же(((

Добавлено через 26 минут
Помогите пожалуйста, очень срочно надо!! Второй день головой об стенку бьюсь..
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
14.03.2010, 17:39     C2061 ошибка, не могу понять что не так #4
какой ужас! это же перекрестное включение заголовочных файлов . у тебя один файл требует включит в него другой а дргугой требует влючеить в себя первый. бесконечо. вроде он дерективами подправлено, но как так один без другого? судя по наличию деректив включения в обоих файлах
Надо от этого избавиться. может поможет, но скорей всего нет. ибо ошибки синтаксические тоже есть типа syntax error : missing ';' before '*'
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
14.03.2010, 17:41     C2061 ошибка, не могу понять что не так #5
1. У тебя все объявления классов должны быть без typedef, примерно так:
C++
1
2
3
4
5
6
7
8
// Класс элементарной частицы
struct Particle
{
        double m;               // Масса частицы
        double * x;
        double * v;
        double * f;
};
2. В начале файла Forces.h убери #include "ParticleSystem.h" и вставь вместо него class ParticleSystem;

Добавлено через 1 минуту
Такой фокус называется "опережающее объявление" (forward declaration). Это позволит развязать гордиев узел взаимных ссылок файлов друг на друга.
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
14.03.2010, 17:52  [ТС]     C2061 ошибка, не могу понять что не так #6
Цитата Сообщение от Aye Aye Посмотреть сообщение
какой ужас! это же перекрестное включение заголовочных файлов . у тебя один файл требует включит в него другой а дргугой требует влючеить в себя первый. бесконечо. вроде он дерективами подправлено, но как так один без другого? судя по наличию деректив включения в обоих файлах
Надо от этого избавиться. может поможет, но скорей всего нет. ибо ошибки синтаксические тоже есть типа syntax error : missing ';' before '*'
Я сначала это все в одном файле делал, но все равно выходит, что ParticleSystem нельзя обьявить без Force, а Force без ParticleSystem

Добавлено через 5 минут
Цитата Сообщение от CheshireCat Посмотреть сообщение
1. У тебя все объявления классов должны быть без typedef, примерно так:
C++
1
2
3
4
5
6
7
8
// Класс элементарной частицы
struct Particle
{
        double m;               // Масса частицы
        double * x;
        double * v;
        double * f;
};
2. В начале файла Forces.h убери #include "ParticleSystem.h" и вставь вместо него class ParticleSystem;

Добавлено через 1 минуту
Такой фокус называется "опережающее объявление" (forward declaration). Это позволит развязать гордиев узел взаимных ссылок файлов друг на друга.
Спасибо, щас попробую...
Yandex
Объявления
14.03.2010, 17:52     C2061 ошибка, не могу понять что не так
Ответ Создать тему
Опции темы

Текущее время: 22:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru