C ++ / CLI - 再次出现错误C2664

时间:2013-02-27 20:28:57

标签: visual-studio-2010 list visual-c++ c++-cli c2664

我正在处理以下问题。为了正式我正在使用VS2010 Ultimate,我尝试编写一个Windows窗体应用程序,但我得到指定的错误:

 1>f:\baza danych\baza\baza\Form5.h(475): error C2664: 'Bazadanych::Dodaj1' : cannot           convert parameter 1 from 'Car' to 'Car'
1>          Cannot copy construct class 'Car' due to ambiguous copy constructors or no available copy constructor

这里是Car.h,我在这里声明了这个类

    public ref class Car
{
public:
    String^ category;
    String^ model;
    String^ rocznik;
    String^ cena;

    Car(){};
    Car(String^ ,String^ ,String^ );
    void edytuj(String^ ,String^ ,String^ );
    String^ getmodel(){return this->model;};
    String^ getrocznik(){return this->rocznik;};
    String^ getcena(){return this->cena;};
    virtual String^ getcat()
    {
        this->category="To rent";
        return this->category;
    };`
}

定义:

    Car::Car(String^ model1,String^ rocznik1,String^ cena1)
    {
       this->model=model1;
       this->rocznik=rocznik1;
       this->cena=cena1;
    };

    void Car::edytuj(String^ model1,String^ rocznik1,String^ cena1)
    {
       this->model=model1;
       this->rocznik=rocznik1;
       this->cena=cena1;
    };

错误提及的方法的类声明:

public ref class Bazadanych
{
public:
cliext::list<Car^> Bazatorent;
cliext::list<Rented^> Bazarented;
cliext::list<Unavaible^> Bazaunavaible;
cliext::list<Car^>::iterator it1;
cliext::list<Rented^>::iterator it2;
cliext::list<Unavaible^>::iterator it3;

Bazadanych()
{
    it1=Bazatorent.begin();
    it2=Bazarented.begin();
    it3=Bazaunavaible.begin();
};
bool Empty();
void Dodaj1(Car);
void Dodaj2(Rented);
void Dodaj3(Unavaible);
void Usun1(Car);
void Usun2(Rented);
void Usun3(Unavaible);
void Czysc();
};

和定义:

void Bazadanych::Dodaj1(Car Element)
{
this->Bazatorent.push_back(Element);
};

我在分开的.h和.cpp文件中有定义和声明。对于其他方法“Dodaj”和“Usun”,我有完全相同的问题。如果它可以帮助类Car是Rented和Unavaible类的基类。 我是C ++ / CLI的新手,所以如果有人能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:1)

我发现错误消息很奇怪,因为它是一个托管类。但您可以通过将方法的签名更改为:

来解决此问题
void Bazadanych::Dodaj1(Car^ Element) // notice the "^"

与其他类似方法相同。

我猜测没有帽子(^),编译器将变量视为常规C ++类,因此需要一个复制构造函数,即使托管类甚至没有复制构造函数(你可以编写它们,但它们永远不会像常规C ++类那样隐式调用。)

编辑:关于评论中的错误:而不是像这样实例化类:

Car car;

这样做:

Car^ car = gcnew Car();

答案 1 :(得分:0)

它说明了它意味着:Car没有复制构造函数。它可能看起来像这样:

Car::Car(const Car& c) { 
    /* your code here*/ 
};

一些背景herehere