2013-05-04 33 views
0

解決:重新啓動的Visual Studio的Visual Studio 2010的列表複製構造拋出C2664錯誤

我工作的一個項目,涉及STL列表學校。並與xmemory得到此錯誤。我只是試圖建立在這一點上的解決方案,但xmemory死我

錯誤1錯誤C2664: 'GroceryStoreItem :: GroceryStoreItem(GroceryStoreItem &)':無法從「的std :: string轉換參數1 '到 'GroceryStoreItem &' d:\微軟的Visual Studio 10.0 \ VC \包括\ xmemory 208

這裏是我的頭

#include <string> 
#include <sstream> 
#include<iostream> 
#include <iterator> 
#include <list> 
using namespace std; 
// 
//***************************************************************** 
//      USER DEFINED DATA TYPES 
// 

class GroceryStoreItem 
{ 
friend ostream & operator<< (ostream &out, const GroceryStoreItem &RHS); 

public: 
GroceryStoreItem(); 
GroceryStoreItem(string Name, double cost, string location); 
GroceryStoreItem(GroceryStoreItem & GroceryStoreItemCCIn); 
GroceryStoreItem & operator= (const GroceryStoreItem &RHS); 
string ReturnItemName(); 
string ReturnLocation(); 
double ReturnCost(); 

private: 
string ItemName; 
string Location; 
double Cost; 
}; 

和實施

#include "Grocery_Item.h" 

using namespace std; 
//***************************************************************** 
//     Grocery Item Constructors 
//***************************************************************** 
GroceryStoreItem::GroceryStoreItem() 
{ 
ItemName = "default"; 
Location = "aisle 1"; 
Cost = 0.0; 
} 

GroceryStoreItem::GroceryStoreItem(string InName, double InCost, string InLocation) 
{ 
ItemName = InName; 
Location = InLocation; 
if(InCost >= 0.0f) 
{ 
Cost = InCost; 
} 
else 
{ 
Cost = 0.0f; 
} 

} 

GroceryStoreItem::GroceryStoreItem(GroceryStoreItem & GroceryStoreItemCCIn)  //Copy Constructor 
{ 
ItemName=GroceryStoreItemCCIn.ItemName; 
Location=GroceryStoreItemCCIn.Location; 
Cost=GroceryStoreItemCCIn.Cost; 
} 

編輯 xmemory錯誤的

template<class _Other> 
    void construct(pointer _Ptr, _Other&& _Val) 
    { // construct object at _Ptr with value _Val 
    ::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Other>(_Val)); 
+0

此錯誤來自哪條線?發佈代碼的那一部分。 – 2013-05-04 05:40:23

回答

1

我關閉了Visual Studio,啓動了一個新項目,並將我的CPP和Headers粘貼到新項目中,並編譯和工作。不是理想的答案,但它的工作。

2

最後一行你需要讓你的拷貝構造函數參數常量

GroceryStoreItem::GroceryStoreItem(const GroceryStoreItem& GroceryStoreItemCCIn)  

而且它通常最好使用在初始化未分配的拷貝構造函數

GroceryStoreItem::GroceryStoreItem(const GroceryStoreItem& rhs) : 
    ItemName(rhs.ItemName), 
    Location(rhs.Location), 
    Cost(rhs.Cost) 
{ 
} 

最後(這是所有人最重要的一課),因爲你在課堂上做了正確的事情並在內部使用std::string,所以你實際上並不需要複製構造函數。編譯器生成的默認值無論如何都會做正確的事情。所以我實際上會刪除你的拷貝構造函數,這也會修復錯誤。

您賦值運算符的相同參數也刪除。

+0

我試過刪除複製構造函數,但仍然收到錯誤 – FriggenA 2013-05-04 05:59:32

+0

我試着編譯你發佈的代碼。對我來說沒有錯誤(也是同樣的編譯器)。這可能是在編譯使用GroceryStoreItem的代碼時發生錯誤。你可以發佈該代碼嗎? – john 2013-05-04 06:05:14

+0

我將修改後的代碼保存到txt文件並重新啓動了visual studio,開始了一個新項目,現在它可以工作。得愛它。謝謝您的幫助! – FriggenA 2013-05-04 06:35:55