+1 за первый абзац!

я проблема с конструктором, который не работает, как я ожидал.

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

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;
    }

};

Ответы на вопрос(1)

Ваш ответ на вопрос