2017-02-13 8 views
-1

Следующий код не работает. Я не знаю почему. Это имеет какое-либо отношение к неявным/явным? Это называется преобразованием?Ошибка компилятора при попытке преобразования конструктора преобразования

#include <type_traits> 

template<typename T> 
class A { 
public: 

    A(T x) {_x=x;} 
    template<typename T2> explicit A(const A<T2> &r) {} 
    template<typename T2> explicit A(A<T2> &r){} 
    template<typename T2> 
    void operator=(const A<T2>& rhs) { _x = rhs._x; } 
    template<typename T2> 
    void operator=(A<T2>& rhs) { _x = rhs._x; } 
    T _x; 
}; 

int main() { 
     const A<int> a(10); 
     A<int> b = a; 
     b = A<int>(5); 
     A<int> c(a); 
     b(a); // not working. why? 
} 

Ошибка: г ++ 6

test.cpp: In function ‘int main()’: 
test.cpp:25:12: error: no match for call to ‘(A<int>) (const A<int>&)’ 
     b(a); // not working. why? 
+0

Как это не работает? – NathanOliver

+0

ошибка компилятора. –

+0

Ваш конструктор копирования не принимает аргумент 'const'. Также вы ожидаете называть 'b'' 'operator()'? – tadman

ответ

2

Я не уверен, что вы ожидаете b(a); сделать, но это не будет делать то, что вы хотите. Объект может быть создан только один раз. После того, как он был построен, вы не сможете его восстановить. Что вы имеете, когда делаете b(a);, вы пытаетесь назвать operator() этого класса. Поскольку у вас его нет, вы получаете ошибку компилятора. Если вы хотите установить b к значению a то вам нужно

b = a; 
Смежные вопросы