разрешение typedef и пространств имен VS2010 - PullRequest
0 голосов
/ 10 марта 2012

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

typedef float real;

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

книга просит, чтобы я определил 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;
    }
};
}

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

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

1 Ответ

2 голосов
/ 10 марта 2012

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

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

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

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

...