У меня проблема с конструктором, который работает не так, как я ожидал.
Если я попытаюсь инициализировать свой класс таким образом, он сработает, и я получу пригодный для использования объект:
vector<float> v;
MyClass<2> a(v);
Однако, если я попытаюсь создать класс, как показано ниже (который должен быть эквивалентен), результаты будут довольно неожиданными. При компиляции или запуске программы нет сообщений об ошибках или предупреждений. Но если вы попытаетесь использовать эту переменную где-нибудь и вызвать ее методы (например, a.doSomething ()), она потерпит крах.
Я поместил некоторый код в конструктор, чтобы уведомить меня, если он используется. Оказалось, что в этом случае код внутри конструктора фактически не выполнялся.
MyClass<2> a(vector<float>());
Так что мне интересно, почему это происходит? 2-я декларация незаконна?
РЕДАКТИРОВАТЬ: я опубликую некоторый код класса
template <int x>
class MyClass {
public:
vector<float> v;
MyClass<x>(vector<float> v1) {
v = v1;
}
};