Заставить параметр шаблона быть структурой - PullRequest
3 голосов
/ 18 января 2010

Я пытаюсь создать базовый шаблонный класс, параметр которого T должен быть структурой.

Когда я использую переменную, объявленную как имеющую тип T (как в классе шаблона, так и в классе, который расширяет его, определяя T ), GCC не может скомпилировать ее:

Ошибка GCC: недопустимое использование неполного тип ‘struct x '

Несмотря на то, что он работает на VC, я понимаю, что он не работает, потому что не должен, потому что компилятор не знает в соответствии со стандартом типов, которые T представляют.

Есть ли способ сделать явным, что тип должен быть структурой?

То, что я делаю в коде, который работает в VC:

В базовом классе:

T* x
new T
sizeof(T)

В тех, кто его расширяет:

x->member

Редактировать: я пытался взять соответствующий код. Вот оно:

struct SomeStructureType
{
    int memberA;
    int memberB;
}

template <typename T> class Base
{

    protected:

        T* s;

        void addMember(string name,void* offset);

        Base()
        {
            s = new T;
        }

};

class Extender : public Base<SomeStructureType>
{
    public:

        Extender()
        {
            addMember("memberA",&s->memberA);
        }
}

Ответы [ 4 ]

1 голос
/ 18 января 2010

В большинстве (если не во всех) случаях, когда компилятор жалуется на использование «неполного» типа, проблема заключается в попытке использовать заранее объявленный класс, который не был полностью определен.

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

1 голос
/ 18 января 2010

В коде, который вы разместили, нет ничего плохого, кроме двух пропущенных точек с запятой после определения класса / структуры: http://codepad.org/yfbHa8sO

1 голос
/ 18 января 2010

Вопрос в названии может быть отклонен; Классы и структуры C ++ нельзя отличить, кроме как с помощью проверки исходного кода.

Объяснение довольно запутанное. Очевидно, есть сообщение о struct x, но пример кода не содержит ни одного x. Это говорит мне о том, что вы не осторожны в сопоставлении ошибок и исходного кода. После этого вам часто не нужен StackOverflow - вы сами увидите проблему.

0 голосов
/ 18 января 2010

Проблема не связана с тем, что T должна быть структурой.Проблема заключается в том, что одна из структур (которые я использую в своем коде, но я не создал ее), называется gcc неполнойВо всяком случае, я удалил класс, который использует эту структуру, а другие классы скомпилированы с тем же базовым классом.Итак, я должен это исправить, и то, что я предположил о проблеме, было неверным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...