Tôi đã thay đổi một paremeter trong một hàm để chấp nhận bất kỳ loại đối tượng nào bằng cách sử dụng mẫu nhưng tôi không thể sử dụng nó cùng với các tham số mặc định khác, có điều gì đó tôi bị thiếu không?Tại sao tôi không thể có mẫu và đối số mặc định?
#include <string>
#include <iostream>
class MyClass {
public:
std::wstring msg = L"hey";
MyClass(){};
};
class MyClass2{
public:
template<class T> MyClass2(T* t, int i);
};
template<class T>
MyClass2::MyClass2(T* t,int i=0){ std::wcout << t->msg << std::endl; }
int main(int argc, char **argv)
{
MyClass mc;
MyClass2 mc2(&mc);
return 0;
}
Output:
practice.cpp:16:32: error: redeclaration of 'MyClass2::MyClass2(T*, int)' may not have default arguments [-fpermissive]
Tôi nghĩ đó là hợp lý để không sử dụng các giá trị mặc định trong mẫu nhưng có một lý do để các thông số khác?