无法使用传递struct和enum作为参数的对象名
C++: Unable to use the object name which passes struct and enum as parameters
我有一个类构造函数,它接受string, struct, enum和int作为参数。除此之外,我还有一个默认构造函数。每当我使用使用参数构造函数创建的对象名调用类函数时,我都会得到一些错误,说成员是非类类型的。但是如果我使用默认构造函数的对象名,我不会得到任何错误。
Car obj(string bini, struct Date dini, enum Status state, int id);
obj.getBrand(); //doesn't work. getting non-class type error
Car obj1; //constructor without parameters
obj1.getBrand(); //works fine
下面是更详细的代码。
//main.cpp
struct Date
{
int year = 0;
int month = 0;
int day = 0;
};
enum Status{ OK, SOLD, DEFECT };
int main()
{
string bini = "";
int id = 0;
Car obj(string bini, struct Date dini, enum Status state, int id);
obj.getBrand(); //doesn't work. getting non-class type error
// Car obj1; //constructor without parameters
//obj1.getBrand(); //works fine
}
//Car.h
class Car
{
public:
struct TDate
{
int year;
int month;
int day;
};
enum TStatus{ OK, SOLD, DEFECT };
void getID();
void getPrice();
void getBrand();
TStatus getStatus();
TDate getManufactureDate();
void setPrice(float price);
void setStatus(TStatus state);
void sellCar();
Car();
Car(string bini, struct TDate dini, enum TStatus sini, int id);
protected:
private:
TStatus state[100];
string brand[100];
float priceEuro[100];
int carId[100], bc = 0, pc = 0, dc = 0, sc = 0;
TDate manufatureDate[100];
};
//Car.cpp
Car::Car(string bini, struct TDate dini, enum TStatus sini, int id)
{
for(int i = 0; i < 100; i++)
{
brand[i] = {bini};
manufatureDate[i].day = dini.day;
manufatureDate[i].month = dini.month;
manufatureDate[i].year = dini.year;
state[i] = sini;
carId[i] = id;
}
}
void Car::getBrand()
{
cout << "Enter the Brand of the Car : " << endl;
cin >> brand[bc];
carId[bc] = bc;
bc++;
}
我不明白我在这里犯的错误。我很感激你的帮助。由于
Car obj(string bini, struct Date dini, enum Status state, int id);
这是一个函数声明。省略传递的变量类型。
Car obj(bini, dini, state, id);
终于找到了错误所在。Car.cpp的结构体和枚举应该全局定义。然后它的变量声明应该在main.cpp中完成,如下所示。
//main.cpp
int main()
{
string bini = "";
int id = 0;
TDate dini; //previously i was using separate temporary struct and enum
dini.day = 0; //inside main, that was not necessary. Now since the class Car's
dini.month = 0; //struct and enum are global i can use them here to declare variables
dini.year = 0; //for enum, i directly passed the value OK thru constructor
int id = 0;
Car obj1(bini, dini, OK, id);
obj1.getBrand(); //no error now
}
//Car.h
struct TDate //**global definition**
{
int year;
int month;
int day;
};
enum TStatus{ OK, SOLD, DEFECT };
class Car
{
public:
void getBrand();
Car();
Car(string bini, TDate dini,TStatus sini, int id);
private:
TStatus state[100];
string brand[100];
float priceEuro[100];
int carId[100], bc = 0, pc = 0, dc = 0, sc = 0;
TDate manufatureDate[100];
};
//Car.cpp
Car::Car(string bini, TDate dini, TStatus sini, int id)
{
for(int i = 0; i < 100; i++)
{
brand[i] = {bini};
manufatureDate[i].day = dini.day;
manufatureDate[i].month = dini.month;
manufatureDate[i].year = dini.year;
state[i] = sini;
carId[i] = id;
}
}
void Car::getBrand()
{
cout << "Enter the Brand of the Car : " << endl;
cin >> brand[bc];
carId[bc] = bc;
bc++;
}
谢谢。
相关文章:
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Arduino C++在构造函数中用参数声明对象数组
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- C++ 类对象作为函数参数
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 如何编写将展开以定义具有模板参数的对象的宏
- C++类对象 - 遍历基于参数的对象
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 是否可以获取成员函数模板参数的拥有对象?
- C++多参数对象创建
- 在不创建参数对象的情况下解析constexpr函数
- 推断模板参数对象成员的类型
- 如何解析c++ v8中的参数对象
- 当默认参数对象被销毁时
- 为什么函数不能更改其参数对象的地址/引用值?