Написание шаблона структуры с двумя векторами - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь создать шаблон struct myVector, который будет содержать два вектора, т.е. vector_a и vector_b. Но я новичок в шаблонах. Я имею в виду, я знаю, почему и когда кто-то предпочел бы использовать шаблоны в определенных ситуациях, но я не совсем уверен, как решить эту проблему. Я написал следующее:

'' '

#include<iostream>
#include<stddef.h>
#include<vector>


template <typename T> struct myVector {

    std::vector<T> vector_a;
    std::vector<T> vector_b;

};


int main() {

    myVector<int> z1(5);
    myVector<int> z2(6);
}

' '. В результате я получаю сообщения об ошибках, например, отсутствие соответствующей функции для вызова VectorXY :: VectorXY (int)' для vector VectorXY z2 (6);

Поэтому я был бы очень признателен за вашу помощь. Заранее спасибо.

1 Ответ

1 голос
/ 28 марта 2020

Ваша ошибка не имеет ничего общего с шаблонами. Рассмотрим следующий код

struct Int { int i; };

int main()
{
  Int z(1); // doesn't compile
}

, и вы получите ошибку, no matching constructor Int(int).

Классы - это абстракция над чем-то другим. Может показаться очевидным, что int и Int в этом случае - это одно и то же, и создание одного должно быть похоже на создание другого. Но компилятор этого не знает, поэтому вам нужно предоставить конструктор, который передает аргумент члену.

struct Int 
{ 
  int i; 
  Int(int n) : i(n) {}
};

Обратите внимание, что в C ++ 20 компилятор действительно сможет выяснить что вы хотите использовать каждый аргумент конструктора для инициализации соответствующего члена вашего класса, поэтому даже без предоставленного конструктора Int будет работать как int.

Однако даже в этом случае ваш код не будет работать, так как вам нужно использовать более сложные правила для создания ваших членов. В вашем случае вам понадобится что-то вроде

myVector(int n) : vector_a(n), vector_b(n) {} 

Предполагая, что вы хотите, чтобы внутренние векторы создавались со значением, переданным в конструктор. Судя по вашему вызывающему коду, кажется, что вы этого хотите, но вы можете написать в конструкторе любую логику c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...