У меня есть эти два cpp файла. Когда я пытаюсь кодировать шаблонную функцию Method()
, возникает ошибка C2440.
Я пробовал три разных способа сделать назначение. Только приведение в стиле C может пройти компилятор.
Я хочу знать, как это сделать в стиле C ++.
Спасибо:)
FileA:
template <typename T>
int ClassName<T>::Method(params...)
{
const T* temp = (T*)GetValueArray(); // C-style cast, right √
const T* temp = GetValueArray(); // no cast, error C2440
const T* temp = static_cast<T*>(GetValueArray()); // error C2440, reinterpret or
// const or dynamic_cast all C2440
}
_______________
FileB:
typedef double mytype;
const mynamespace::mytype* GetValueArray() const
{
mynamespace::mytype res[3] = {1,2,3};
return res;
}
#include <iostream>
typedef double MyType;
const MyType* GetValueArray()
{
MyType* ptr = new MyType;
*ptr = 20.20;
return ptr;
}
template <typename T>
void Method()
{
const T* temp = (T*)GetValueArray(); // C-style cast, right √
//const T* temp = GetValueArray(); // no cast, error C2440
//const T* temp = static_cast<T*>(GetValueArray()); // error C2440, reinterpret or
// const or dynamic_cast all C2440
std::cout << *temp;
}
int main(int argc, char* argv[])
{
Method<double>();
}
Я получаю вывод 20.2. Здесь я могу получить правильный результат, потому что T
это просто double
. В этой ситуации при потере const
программа может передать компилятор.
Но если я изменю на Method<int>
, неважно, какой будет результат (на самом деле результат - бесполезное число), но почему C2440 будет происходить?