Относительно ошибки, вызванной использованием sizeof (класса) в C ++ - PullRequest
4 голосов
/ 04 июля 2011

Когда я компилирую свой проект в C ++, MSVC выдает следующую ошибку:

ошибка # 94: размер массива должен быть больше нуля

Ошибка выдается в следующей строке при выполнении sizeof:

if (sizeof (MyNamespace::MyClass) == 60)

MyClass определяется следующим образом:

class MyClass: public ParentClass
{
    public:
        MyClass( void *pCreate, int a, int b, bool c) :
              ParentClass( pCreate, a, b, c ) {}

        virtual inline void myFunc ( ) 
        {
            //something
        }
    private:
        virtual ~MyClass(){};

        /**
        * Copy assignment. Intentionally made private and not implemented to prohibit usage (noncopyable stereotype)
        */
        MyClass& operator=(const MyClass&);
};

Может кто-нибудь сказать мне, что может быть не так?Даже если sizeof возвращает нулевой размер, почему это ошибка компилятора?

Ответы [ 2 ]

10 голосов
/ 04 июля 2011

Эта ошибка возникает, когда вы берете sizeof класса, который только объявлен на тот момент.Например, class MyClass; const size_t error = sizeof(MyClass);.

Обратите внимание, что не имеет значения, будет ли класс полностью определен позднее: определение должно предшествовать sizeof.

2 голосов
/ 04 июля 2011

Эта ошибка, скорее всего, вызвана предварительным объявлением. В строке, где вы используете sizeof, компилятору нужно знать определение вашего класса MyClass, то есть вы должны иметь включенный заголовочный файл для него

...