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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2013, 22:00   #1
Alex46
Пользователь
 
Регистрация: 19.07.2013
Сообщений: 11
Плохо Необоснованные ошибки компилятора

Доброе время суток! На лето в универе задали задание написать враппер для nVidia PhysX под Ogre3D. Пытаюсь скомпилировать проект, выдаёт кучу ошибок, связанных с классами, хотя их там нет (IntelliSence ничего не выдаёт). IDE: Visual Studio 2012 x64. Вот проект https://bitbucket.org/ufoterminator/zergengine. Можете взять через hg. Просьба не судить строго. Это мой первый серьёзный и большой проект.
Alex46 вне форума Ответить с цитированием
Старый 19.07.2013, 22:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ради того чтоб скачать ваш проект нам надо ставить Hg клиент?
вы так же для нужен будет PhysX SDK полагаю.

может вы ошибки компилятора покажете и примеры когда где они возникают.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.07.2013, 15:33   #3
Alex46
Пользователь
 
Регистрация: 19.07.2013
Сообщений: 11
По умолчанию

Код:
#ifndef _PHYSX_RIGID_BODY_H
#define _PHYSX_RIGID_BODY_H

#include "export.h"
#include "PhysXCollisionShape.h"
#include "PhysXScene.h"

/**
@class PhysXRigidBody
класс твёрдого тела
*/
class PHYSXWRAPPER_API PhysXRigidBody
{	

	///твёрдое тело
	physx::PxRigidActor *rigidActor;
	
	///ссыдка на узел сцена
	Ogre::SceneNode *node;

	///ассоциативный массив контуров
	///ключ - имя контура
	std::map<Ogre::String, PhysXCollisionShape> shapeTree;

	PhysXScene &scene; //здесь ошибка

	typedef std::map<Ogre::String, PhysXCollisionShape>::iterator PhysXCollisionShapeIter;

	///узел изменён?
	bool nodeChanged;

	///тело изменено?
	bool rigidBodyChanged;

	///будет двигаться
	bool dynamicRigidBody;

	///густота (для статического тела равна 0)
	float density;

	///имя тела
	Ogre::String name;

	///обновление тела
	void updateBody();

	///обновление узла
	void updateNode();

public:	

	enum{NOT_DYNAMIC_RIGID_BODY = -1};

	///конструктор
	///используется только этот
	///не вызывать напрямую
	///@param _node - узел, к которому будет присоедено твёрдое тело
	///@param scene - сцена, в которой будет создано тело
	PhysXRigidBody(Ogre::SceneNode* _node, PhysXScene& scene); //здесь ошибка

	///установить динамическое твёрдое тело
	///можно вызвыть только 1 раз, в противном случае возбудится исключение PhysXDynamicRigidBodySettedEarly
	///по-уполчанию - статическое
	void setDynamicRigidBody();

	///проверка на динамическое тело
	///@return true если тело динамическое иначе - false
	bool isDynamicRigidBody();

	///создание контура
	///@param name - имя контура
	///@return ссылка на контур
	PhysXCollisionShape& createCollisionShape(Ogre::String& name);

	///установка плотности тела
	///только для динамических тел
	///при попытке применить к статическому телу возбуждается исключение PhysXNotDynamicRigidBody
	///@param density - густота тела
	void setDensity(float density);
	
	///получить плотность тела
	///для статического тела возвращает NOT_DYNAMIC_RIGID_BODY
	///@return плотность тела
	float getDensity();

	///установка ориентации
	///@param rotation - кватернион ориентации
	void setOrientation(const Ogre::Quaternion& rotation);

	///установка позиции
	///@param position - позиция
	void setPosition(const Ogre::Vector3& position);

	///получение ориентации
	///@return ориентаци
	const Ogre::Quaternion& getOrientation();

	///получение позиции
	///@return позиция
	const Ogre::Vector3& getPosition();

	///установка имени твёрдого тела
	///@param name - имя твёрдого тела
	void setName(Ogre::String& name);

	///получение имени твёрдого тела
	///@return имя твердого тела
	Ogre::String& getName();

	///обновление позиции и ориентации твёрдого тела или узла
	void update();

	///получение твёрдого тела
	physx::PxRigidActor& getRigidActor();

	///установка изменения тела
	void setBodyChanged();

	///установка изменения узла
	void setNodeChanged();

	///тело изменено?
	///@return если да - true, иначе false
	bool isBodyChanged();

	///узел изменен?
	///@return если да - true, иначе false
	bool isNodeChanged();

	///получение контура по имени
	///@param name - имя контура
	///@return контур
	PhysXCollisionShape& getCollisionShape(Ogre::String& name);

	///создание твёрдого тела
	void construct();

	///получение сцены
	///@return ссылка на сцену
	PhysXScene& getScene(); //здесь ошибка

	~PhysXRigidBody();
};


#endif
Ошибка: error C2143: syntax error : missing ';' before '&' (пропущена точка с запятой до амперсанда).
Alex46 вне форума Ответить с цитированием
Старый 20.07.2013, 15:34   #4
Alex46
Пользователь
 
Регистрация: 19.07.2013
Сообщений: 11
По умолчанию

Вот определение класса PhysXScene:

Код:
#ifndef _PHYSX_SCENE_H
#define _PHYSX_SCENE_H

#include "export.h"
#include "PhysXRigidBody.h"

/**
@class PhysXScene
класс физической сцены
*/
class PHYSXWRAPPER_API PhysXScene
{
	///физическая сцена
	physx::PxScene* scene;

	///имя сцены
	Ogre::String name;
	
	///количество потоков в сцене
	int threadNum;

	///ассоциативный массив, содержащий твёрдые тела
	///ключ - имя твердого тела
	std::map<Ogre::String, PhysXRigidBody> bodyTree;

	///итератор твёрдых тел
	typedef std::map<Ogre::String, PhysXRigidBody>::iterator PhysXRigidBodyIter;

	///вектор гравитации
	Ogre::Vector3 gravity;

	///гравитация установлена?
	bool gravitySetted;

public:
	///конструктор сцены
	///не вызывается напрямую
	///@param _name - имя сцены
	///@param _threadNum - количество потоков в сцене
	PhysXScene(Ogre::String& _name, int _threadNum = 1);

	PhysXScene();

	///создание статического твёрдого тела
	///@param name - имя твёрдого тела
	///@param node - узел сцены, к которому будет прикпреплёно тело
	PhysXRigidBody& createStaticRigidBody(Ogre::String& name, Ogre::SceneNode* node);

	///создание динамического твёрдого тела
	///@param name - имя твёрдого тела
	///@param node - узел сцены, к которому будет прикпреплёно тело
	///@param density - плотность тела
	PhysXRigidBody& createDynamicRigidBody(Ogre::String& name, Ogre::SceneNode* node, float density);
	
	///физическая симуляция
	///@param elapsedTime - прошедшее время
	void simulate(float elapsedTime);

	///вовращает имя сцены
	///@return имя сцены
	Ogre::String& getName();

	///возвращет количество потоков в сцене
	///@return количество потоков в сцене
	int getThreadNum();

	///установка вектора гравитации
	///вызывается только 1 раз, при повторном вызове будет вызвано исключение PhysXGravitySettedEarly
	///@param gravity - вектор гравитации
	void setGravity(Ogre::Vector3& gravity);

	///возвращает вектор гравитации
	///@return вектор гравитации
	Ogre::Vector3& getGravity();

	///гравитация установлена?
	///@return да - true, нет - false
	bool isGravitySetted();

	///создёт сцену
	void create();

	///получить трёрдое тело по имени
	///@param name - имя тела
	///@return твёрдое тело
	PhysXRigidBody& getRigidBody(Ogre::String& name);

	///добавление тела в сцену по ссылке
	///@param body - тело
	void addRigidBody(PhysXRigidBody& body);
	
	///добавление тела в сцену по имени
	///@param name - имя тела
	void addRigidBody(Ogre::String& name);

	~PhysXScene();
};


#endif
Alex46 вне форума Ответить с цитированием
Старый 20.07.2013, 15:38   #5
samarjan
 
Регистрация: 04.10.2012
Сообщений: 5
По умолчанию

встречал подобные ошибки, когда был нарушен синтаксис
samarjan вне форума Ответить с цитированием
Старый 20.07.2013, 15:51   #6
Alex46
Пользователь
 
Регистрация: 19.07.2013
Сообщений: 11
По умолчанию

так в том то и дело, что синтаксис не нарушен
Alex46 вне форума Ответить с цитированием
Старый 20.07.2013, 16:06   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
physx::PxRigidActor
здесь у вас указано пространство имен physx.
а при PhysXScene нет, разве оно не нужно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.07.2013, 17:33   #8
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

а где подключение хедеров Огра?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 20.07.2013, 17:48   #9
Alex46
Пользователь
 
Регистрация: 19.07.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
physx::PxRigidActor
здесь у вас указано пространство имен physx.
а при PhysXScene нет, разве оно не нужно?
Нет, не нужно, это класс враппера.
Alex46 вне форума Ответить с цитированием
Старый 20.07.2013, 18:04   #10
Alex46
Пользователь
 
Регистрация: 19.07.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
а где подключение хедеров Огра?
что с ними, что без них было всё так же. Те же ошибки в тех же местах.
Alex46 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра - викторина. Ошибки, ошибки, ошибки!.. three_cats Общие вопросы C/C++ 1 27.10.2012 21:47
не вижу ошибки, компилятора нет Alllya Помощь студентам 0 16.12.2011 00:27
Создание компилятора Crivel Софт 7 23.01.2010 18:29
Ошибки компилятора Doktor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 16.01.2009 00:42