ошибка шаблона gcc - PullRequest
       12

ошибка шаблона gcc

0 голосов
/ 11 июля 2010

почему в первой строке этого кода:

template <typename VectorType>
std::string repr_vector_dynamic(const VectorType* vect)
{
    std::stringstream strs;
    strs << "(";
    for (int i = 0; i < vect->size(); ++i) {
        if (0 != i) {
            strs << ", ";
        }
        strs << (*vect)[i];
    }
    strs << ")";
    return strs.str();
}

Я всегда получаю эти ошибки в первой строке: (MinGW gcc 4.5)

Ожидается ';'перед «шаблоном»

ожидаемое первичное выражение перед «шаблоном»

thx

позднее редактирование : вот командная строка / журналЯ получил от затмения:

g++ -II:\proj\bp\PyCML -IC:\PF\Python26\include -II:\proj\bp/include -O3 -Wall -c -fmessage-length=0 -oPyCML\cml.o ..\PyCML\cml.cpp
In file included from I:\proj\bp/include/boost/python/object/make_instance.hpp:9:0,
             from I:\proj\bp/include/boost/python/object/make_ptr_instance.hpp:8,
             from I:\proj\bp/include/boost/python/to_python_indirect.hpp:11,
             from I:\proj\bp/include/boost/python/converter/arg_to_python.hpp:10,
             from I:\proj\bp/include/boost/python/call.hpp:15,
             from I:\proj\bp/include/boost/python/object_core.hpp:14,
             from I:\proj\bp/include/boost/python/args.hpp:25,
             from I:\proj\bp/include/boost/python.hpp:11,
             from ..\PyCML\cml.cpp:11:
I:\proj\bp/include/boost/python/object/instance.hpp:14:36: warning: type attributes ignored after type is already defined
In file included from ..\PyCML\cml.cpp:28:0:
I:\proj\bp\PyCML/PyCMl/vector.h: In function 'void init_module_PyCML()':
I:\proj\bp\PyCML/PyCMl/vector.h:22:1: error: expected primary-expression before 'template'
I:\proj\bp\PyCML/PyCMl/vector.h:22:1: error: expected ';' before 'template'
..\PyCML\cml.cpp:58:1: error: expected '}' at end of input

Ответы [ 4 ]

1 голос
/ 11 июля 2010

Как и предполагали другие, это то, что предшествует объявлению template, в котором отсутствует ;.

Посмотрите на то, что видит компилятор, таким образом:

g++ -E <yourfile>.cpp | less

0 голосов
/ 11 июля 2010

Ошибки, которые вы опубликовали, указывают на то, что проблема в функции void init_module_PyCML(). Поэтому может показаться, что вы пытались определить шаблон функции в теле другой функции.

Например, попытка скомпилировать следующий код дает мне ту же ошибку

void f()
{

template < typename T >
void g()
{
};

}

Последняя строка ошибки говорит о том, что, возможно, вы забыли закрывающий } для init_module_PyCML()?

0 голосов
/ 11 июля 2010

Возможно, вам следует использовать g++, компилятор C ++ вместо gcc, компилятор C.

Другая возможность состоит в том, что у одного из ваших заголовков есть #define d действительно злой макрос.

0 голосов
/ 11 июля 2010
expected ';' before 'template'
expected primary-expression before 'template'

Вы забыли точку с запятой перед первой строкой. Можете ли вы дать предыдущую строку?

...