這裏的矢量數據成員是一個抽象類,我寫道:如何訪問一個完整的派生類
class Month
{
public:
//factory method
static Month* choose_month(int choice); //static function
virtual void birthstone() = 0; //virtual function
virtual void month() = 0; //virtual function
virtual ~Month()
{
std::cout << "Deleting the virtual destructor" << std::endl;
};
};
Month* Month::choose_month(int choice)
{
switch (choice)
{
case '1':
return new January;
break;
case '2':
return new February;
break;
//these cases go all the way to December
default:
break;
}
}
然後,我創建12個的派生類,一個是一年中每個月。我將只包括兩個所述類爲簡單起見:
class January : public Month
{
public:
void birthstone()
{
std::cout << "Garnet" << std::endl;
}
void month()
{
std::cout << "January" << std::endl;
}
//destructor
~January()
{
std::cout << "Deleting the object" << std::endl;
}
};
class February : public Month
{
public:
void birthstone()
{
std::cout << "Amethyst" << std::endl;
}
void month()
{
std::cout << "February" << std::endl;
}
//destructor
~February()
{
std::cout << "Deleting the object" << std::endl;
}
};
以我主要功能我使用隨機數發生器來選擇一個派生類,這樣我可以在其成員函數訪問數據:
std::vector<Month*> stone;
std::srand(static_cast<unsigned>(time(0))); // Seed the random generator
//for-loop
for (int i = 0; i < 6; i++)
{
stone.push_back(Month::choose_month(random(12)));
}
當我嘗試訪問存儲在我的向量中的任何類的成員函數時,會發生問題。我不斷收到訪問衝突錯誤:
//displaying the elements inside the container
for (std::vector<Month*>::iterator iter = stone.begin(); iter != stone.end(); iter++)
{
(*iter)->birthstone();
}
我實在看不出錯誤所在,並想知道如果有人能請指出什麼問題呢?謝謝。
您的'choose_month'函數具有未定義的行爲,因爲它具有非void返回類型,並且在每個路徑上都沒有'return'語句。 –
如果你提高了警告級別,那麼你有微不足道的錯誤會被編譯器捕獲。 – juanchopanza
您正在切換字符,而不是整數。 – tkausl