Как вызвать конструктор шаблона с объектами другого класса?Создание объекта шаблона C++
Пример:
#include <iostream>
using namespace std;
class RGB{
private:
int _R;
int _G;
int _B;
public:
RGB(int a, int b, int c){
_R=a;
_G=b;
_B=c;
}
};
class Gray{
int _G;
public:
Gray(int x){
_G=x;
}
};
template <class T1, class T2>
class Pixel{
public:
Pixel(T1 i, T2 j, int a, int b){
foo=i;
bar=j;
x=a;
y=b;
}
void setPixel(T1 a, T2 b){
foo=a;
bar=b;
}
void getPixel();
private:
int x;
int y;
T1 foo;
T2 bar;
};
int main(){
Gray g(3);
RGB rgb(4, 5, 6);
Pixel<Gray,RGB> pi(g, rgb, 10,27);
return 0;
}
Я могу использовать конструктор класса только с конструкторами по умолчанию двух классов планкой1 и BAR2, но не с двумя объектами классов, которые я создал ранее (в этом case bar1 и bar2).
Ошибки:
main.cpp: In instantiation of 'Pixel::Pixel(T1, T2, int, int) [with T1 = Gray; T2 = RGB]':
main.cpp:62:37: required from here
main.cpp:35:37: error: no matching function for call to 'Gray::Gray()'
main.cpp:35:37: note: candidates are:
main.cpp:26:5: note: Gray::Gray(int)
main.cpp:26:5: note: candidate expects 1 argument, 0 provided
main.cpp:23:7: note: Gray::Gray(const Gray&)
main.cpp:23:7: note: candidate expects 1 argument, 0 provided
main.cpp:35:37: error: no matching function for call to 'RGB::RGB()'
main.cpp:35:37: note: candidates are:
main.cpp:16:9: note: RGB::RGB(int, int, int)
main.cpp:16:9: note: candidate expects 3 arguments, 0 provided
main.cpp:9:7: note: RGB::RGB(const RGB&)
main.cpp:9:7: note: candidate expects 1 argument, 0 provided
Ошибки уходят, если добавить значения по умолчанию в конструкторах RGB и Грея. Извините за беспорядок, я здесь новый ...
Вы получаете ошибку «неполного типа»? Я не могу следовать вашим объяснениям. –
Ваш конструктор, вероятно, должен быть «public», но кроме этого, если вы даете определения ctor и двух классов «Bar1» и «Bar2», ваш код работает нормально. [Живой пример] (http://coliru.stacked-crooked.com/a/c887bf512118a71c) – dyp
Вы передаете копии bar1 и bar2 в конструктор Foo. Что не работает? Что вы ожидаете от этого? Можете ли вы построить пример, который показывает, что вы хотите сделать? –