2012-03-10 4 views
0

Я работаю над созданием физического движка (с помощью книги), и в книге предлагается создать пространство имен для движка, в котором будет существовать, и для первой части я объявляю а «ЬурейеЕ» для переменных, как такРешение typedef и пространств имен VS2010

typedef float real; 

и я могу понять объяснение, что автор дает существо, что «если точность потребности изменятся, то вы можете просто пойти в одну строку, и изменить его, а затем, возможно, есть чтобы изменить не более 10 вспомогательных функций и ясность представления, но я думаю, что это совпадает с двумя другими вещами, поэтому я надеюсь, что это последующее.

b ook спрашивает, что я определяю typedef и вспомогательные функции в одном файле (чтобы свести к минимуму скачкообразное изменение файла, если требуется изменение), а затем включить это, прежде чем другие файлы будут скомпилированы, и сделать все это в пространстве имен (я назвал физику) , затем в другом файле создайте классы, которые будут использоваться в движке. хотя прямая проблема с IntelliSense и разрешением

genFunction.h 
namespace Physics{ 
typedef float real; 
} 


Classes.h 
#include "genFunction.h" 
namespace Physics{ 
class Vector3{ 
public : 
    real x; // visual studio is throwing that Physics::real is not a type name 
    real y; 
    real z; 
    // VS is not offering collapsing, or any form of 
    // auto/assistance with lines. 
    // almost like it does not want me to have classes 
    // in my own namespaces 
    Vector3(){ // uncolapsable 
     x = 0; 
     y = 0; 
     z = 0; 
    } 
}; 
} 

я делаю что-то неправильно, учитывая, что компилятор игнорирует, что я сделал ЬурейеЕ, и это upscope, где проблема происходит, а затем тот факт, что VS даже не показывает предложения, пока я нахожусь внутри класса в самодельном пространстве имен, немного беспокоит меня.

Edit: основное решение проблемы с разрешением. по-видимому, вместо { я поставил ( на один из методов, и это заставило его действовать, как и все пространство имен не существовало. хотя VS все равно не окажет мне никакой помощи (сбой функции/класса/пространства имен или предложения завершения даже с помощью ctrl + пробел), также у меня есть некоторые вспомогательные функции, которые я использую (self made pow(), sqrt()), которые я использование, которое вызывает ошибки компоновщика, если не в классе, но это исчезает, когда я вставляю их в линию. это плохо для решения компоновщика?

+0

Вы проверили правописание файла заголовка? '" genfunction.h "или' "genFunction.h" '? – iammilind

+0

это обобщение, и в моем коде это то же самое. исправлено в вопросе – gardian06

+0

В этом случае код представляется [рабочим] (http://ideone.com/QBnyK) с gcc. Используете ли вы более старую версию MSVC? – iammilind

ответ

2

Прежде всего, компилятор не метание ничего. Поскольку вы не сказали иначе, я предполагаю, что ваш код компилируется в порядке. Тогда проблема с Intellisense, и не более того.

Intellisense в C++, как известно, шаткий. Иногда это работает, иногда это не так. Это может зависеть от фаз луны.

Иногда вы можете «поощрять» его немного, будучи более явным. Если вы наберете ::, он должен предложить всех членов глобального пространства имен. ::Physics::, и он должен предложить членам пространства имен Physics.

Это может быть просто вопрос ожидания (или перезапуска VS или перестройки?), Пока он не решит повторно обработать ваш код.

Смежные вопросы