Я пытаюсь создать класс, в котором есть объект-шаблон.Например,
mt_queue_c<int> m_serial_q("string");
Однако, когда я делаю это, он не компилируется.Если я переместу эту строку за пределы определения класса, чтобы он стал глобальным объектом, он прекрасно скомпилируется.
Я сжал код в наименьшую возможную единицу сбоя, как показано ниже (да,это не имеет смысла, потому что другие переменные и функции-члены отсутствуют ...)
#include <deque>
#include <queue>
#include <pthread.h>
#include <string>
#include <iostream>
template <class T, class Container = std::deque<T> >
class mt_queue_c {
public:
explicit mt_queue_c(const std::string &name,
const Container &cont = Container()) :
m_name(name),
m_c(cont)
{};
virtual ~mt_queue_c(void) {};
protected:
// Name of queue, used in error messages.
std::string m_name;
// The container that manages the queue.
Container m_c;
};
// string object for a test
std::string test2("foobar");
// Two tests showing it works as a global
mt_queue_c<char> outside1("string");
mt_queue_c<char> outside2(test2);
// Two failed attempts to include the object as a member object.
class blah {
mt_queue_c<int> m_serial_q("string"); // this is 48
mt_queue_c<char> m_serial_q2(test2); // this is 50
};
// Adding main just because.
int main ()
{
std::cout << "Hello World" << std::endl;
}
Когда я делаю это, я получаю следующие ошибки:
make
g ++ -m32 -fPIC -Werror -Wall -Wunused-function -Wunused-параметр -Wunused-переменная -I.-I / views / EVENT_ENGINE / LU_7.0-2 / server / CommonLib / include -I / views / EVENT_ENGINE / LU_7.0-2 / server / Common / Build / Include -g -c -o $ {OBJ_DIR} / testTemp.o testTemp.cxx
testTemp.cxx: 48: ошибка: ожидаемый идентификатор перед строковой константой
testTemp.cxx: 48: ошибка: ожидается ','или' ... 'перед строковой константой
testTemp.cxx: 50: ошибка:' test2 'не является типом
make: *** [/views/EVENT_ENGINE/LU_7.0-2/server/applications/event_engine/Obj/testTemp.o] Ошибка 1
Что я делаю не так?Как можно «встроить» шаблон в класс, если мы хотим, чтобы тип шаблона всегда был одинаковым для определенного класса?
Заранее благодарен за помощь.