У меня проблема с конструктором, который работает не так, как я ожидал.
Если я попытаюсь инициализировать свой класс таким образом, он сработает, и я получу пригодный для использования объект :
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;
}
};