我有一个程序可以在网络上执行模拟。
我的所有课程和实现都在h文件中,我试图打电话给我的班级' main.cpp中的函数(在h文件中)。
我在我的课堂上使用枚举,而从main.cpp调用的c&#t; tor则采用枚举值。我不断收到错误,因为每次更改声明地点时,cpp或h文件都不知道这些启示。
1.应该在我的班级内宣布吗?外?在cpp和h文件中?
2.如果我也希望类的方法能够使用枚举类型,我应该在哪里放置声明?
3.从cpp文件和类的方法获取枚举类型的正确方法是什么?我看到了一些选项,如ClassName :: enumType,CLassName.enumType等。
这是我的代码结构:
main.cpp
#include...
enum networkType {X,Y};
int main(){
//create instances of my class
network n = new network(X, ...);
}
networks.h
//enum networkType {X, Y}; here?
class network{
enum networkType {X, Y}; //here?
network::network(networkType x, ...) //c'tor
..
//members:
networkType type_;
//functions that use the enumerated value
void setNetworkType(networkType t);
networkType getNetworkType();
...more methods
我得到的一些错误是 - 对于getter方法 - ' NETWORKTYPE'没有命名类型 networkType network :: getNetworkType()
感谢。
答案 0 :(得分:1)
如果将var formData = new FormData();
formData.append('image', image);
formData.append('name', name);
formData.append('email', email);
formData.append('address', address);
formData.append('co_address', co_address);
formData.append('city', city);
formData.append('action' 'det_lilla_extra'); // Note this line
// Note that I removed your wrapper object
$.ajax({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
dataType: 'json',
data: formData, // Note this change
processData: false, // Don’t forget this one
定义放在类中,则枚举的实际名称为enum
。您必须在类范围之外使用全名(包括类外部成员函数定义的返回类型,除非您使用尾随返回类型)。
network::networkType
(请注意,如果您已经在main.cpp中显示network::networkType network::getNetworkType()
{ return _type; }
,则该不同的和不兼容的类型。)
答案 1 :(得分:0)
1.应该在我的班级内宣布吗?外?在cpp和h文件中?
enum networkType {X,Y};
绝对不应该在全球范围内,因为这会使X
和Y
污染全球范围。无论如何,枚举的声明应始终(且仅)在类的头文件中。
首选C ++ 11声明为enum class networkType {X, Y}
因此X
和Y
的范围将为networkType
。
如果networkType
主要用于network
,我会将其声明置于network
内,如下所示:
class network{
enum class type {X, Y};
};
无需在枚举名称中添加前缀“network”,因为type
现在的作用域为network
。
如果您不能使用C ++ 11,我更喜欢这种风格:
class network{
enum type {TYPE_X, TYPE_Y};
};
2.如果我还希望类的方法能够使用枚举类型,我应该在哪里放置声明?
方法声明和成员变量可以使用不带前缀的嵌套类型:
class network{
enum class type {X, Y};
network( type x, ... );
type getNetworkType() const; //< added const here, because method is only observer
type _type;
}
当方法的实现不是内联时,您必须添加范围前缀:
network::network( network::type x, ... ){
// within function body no scope prefix is needed:
type y = x;
}
network::type network::getNetworkType() const{
return _type;
}
全局函数必须在函数头中使用前缀以及body:
network::type do_something( network::type x ){
network::type y = x;
return y;
}
- 从cpp文件和类的方法中获取枚举类型的正确方法是什么?
醇>
“来自班级的方法” - 见上文。
在.cpp文件中,你必须使用范围前缀。虽然我们在此,但默认情况下不要使用运算符new
。在大多数情况下,您可以(并且应该)在堆栈上创建对象。如果您确实需要动态分配,请选择std::unique_ptr
等智能指针。现代C ++代码几乎不应包含delete
,也很少包含new
。
int main(){
// Prefer to use stack variables:
network net( network::type::X );
network::type theType = net.getNetworkType();
// If you really need dynamic allocation:
auto pnet = std::make_unique<network>( network::type::X );
theType = pnet->getNetworkType();
}