我有以下三類:爲什麼我會收到「訪問衝突」這個C++代碼
class BeliefRoot
{
std::string m_Name;
BeliefRoot(std::string Name) : m_Name(Name)
{ }
};
template <class factType>
class Belief : public BeliefRoot
{
factType m_Fact;
explicit Belief(std::string UniqueName, factType InitialFact = NULL)
: BeliefRoot(UniqueName), m_Fact(InitialFact)
{ }
};
template <class factType>
class BeliefSet : public Belief<factType>
{
std::list<factType> m_Facts;
explicit BeliefSet(std::string UniqueName) : Belief(UniqueName)
{ }
};
現在我想將類實例BeliefSet
兩次:
BeliefSet<float> bSetFloat("SetFloat");
BeliefSet<std::string> bSetString("SetString");
第一是好的,但在第二個電話我得到以下錯誤:
0xC0000005:訪問衝突讀取位置0x0000000000000000。
有人可以解釋爲什麼會發生這種情況,但只有與std::string
一起使用?
如果你有C++ 11,你應該開始使用'nullptr'。它會給你一個更好的錯誤,因爲將非指針tpye設置爲NULL是無意義的。 – NathanOliver
在C++中,您不應該再使用宏'NULL'。使用'nullptr',或者爲你正在使用的任何類型使用適當的「零初始化器」。 – Xirema
但是'factType'也可以成爲一個原語,比如'int'。在那種情況下,我不允許使用'nullptr',或者我?我得到以下錯誤,然後:*錯誤C2440:'默認參數':不能從'nullptr'轉換爲'int'* – Matthias