2013-05-04 2 views
0

РЕШИТЬ: Restarted Visual StudioVisual Studio 2010 Список копия конструкт метания C2664 ошибка

Я работаю над проектом для школы с участием STL списка. и получить эту ошибку с xmemory. Я просто пытаюсь построить решение в этой точке, но xmemory убивает меня

Ошибка 1 Ошибка C2664: «GroceryStoreItem :: GroceryStoreItem (GroceryStoreItem &)»: не удается преобразовать параметр 1 из «станд :: строка 'до 'GroceryStoreItem &' d: \ Microsoft 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

В чем состоит эта ошибка? Отправьте эту часть кода. –

ответ

1

Я закрыл Visual Studio, начал новый проект и ввел свои CPP и заголовки в новый проект, и он скомпилирован и работал. Не идеальный ответ, но он сработал.

2

Вы должны сделать вашу копию аргумента конструктора Const

GroceryStoreItem::GroceryStoreItem(const GroceryStoreItem& GroceryStoreItemCCIn)  

Кроме того, это, как правило, лучше использовать инициализации не назначение в вашем копировальный аппарат

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

Наконец-то (и это самый важный урок из всех), потому что вы сделали правильную вещь и использовали std::string внутри вашего класса, вам вообще не нужен конструктор копирования. Компилятор, созданный по умолчанию, будет делать все правильно. Поэтому я бы фактически удалил ваш конструктор копий, это также устранит ошибку.

Тот же аргумент для вашего оператора присваивания, удалите его тоже.

+0

Я попытался удалить конструктор копирования и все еще получаю ошибку – FriggenA

+0

Я пробовал компилировать код, который вы опубликовали. Ошибка для меня (такой же компилятор тоже). Вероятно, когда вы компилируете код, который использует GroceryStoreItem, возникает ошибка. Не могли бы вы опубликовать этот код? – john

+0

Я сохранил измененный код в txt-файле и перезапустил визуальную студию, начал новый проект, и теперь он работает. должен любить его. Спасибо за помощь! – FriggenA

Смежные вопросы