我已經在C++/CLI如下:(把我的錯誤的音符評論)鑄造問題 - 不會編譯
class Base{...}
class Derived : public Base{...}
public ref class CliClass
{
public:
std::list<Base*> *myList;
CliClass()
{
myList = new list<Base*>();
}
AddToList(Derived *derived)
{
myList->push_back(derived);
}
DoCast()
{
Derived *d = nullptr;
int n = (int)myList->size();
for(int i = 0; i < n; i++)
{
//this following does not compile
//error C2440: 'type cast' : cannot convert from 'std::list<_Ty>' to 'Derived *'
d = (Derived*)myList[i];
//I've also tried this -which does not compile
//error C2682: cannot use 'dynamic_cast' to convert from 'std::list<_Ty>' to 'Derived *'
d = dynamic_cast<Derived*>(myList[i]);
}
}
}
我想投myList中[I]到派生類型..但它不會允許我。
關於如何正確投射這個任何建議? (編譯並且運行時安全 - 即如果錯誤類型不會被炸掉)
這段代碼甚至是否正確?它看起來很腥。我不知道CLI,但是這個怎麼樣:1)'std:List'實際上是一個真正的類型? 2)你聲明'myList'作爲一個對象,然後嘗試在'CliClass :: CliClass()'中分配一個指向它的指針 - 怎麼樣? 3)列表沒有隨機訪問,你爲什麼寫'[我]'? –
@Kerrek SB:1)是的。 2)對不起,myList應該是一個指針。補充說。 3)這可能是我的問題嗎?它編譯..我認爲我可以通過索引 – developer
訪問我從來沒有聽說過類型'std :: List'(大寫'L'),是一個CLI擴展?無論如何,在'myList =新列表 ();'中列出的限定類型是什麼?最後,隨着你現在的改變,'myList [i]'把'myList'視爲**數組**,肯定不是你想要的! –