C++ 从其他头文件实现结构

C++ 从其他头文件实现结构,c++,struct,header,extern,C++,Struct,Header,Extern,我必须在类头中有一个结构“configset”,类似这样: class A { public: static configset *getnext(); } 当然,编译器会抱怨configset不是一个类型,但它与一些函数一起在另一个头文件中实现。因为我不能只包含头文件,编译器会抛出错误,这些函数被多次定义。但是如何在类头中获取配置集?复制也不行,因为编译器抛出了一个错误,结构被定义了两次。向前声明configset或将头文件中定义的函数声明为inline向前声明configset,或

我必须在类头中有一个结构“configset”,类似这样:

class A {
public:
    static configset *getnext();
}

当然,编译器会抱怨configset不是一个类型,但它与一些函数一起在另一个头文件中实现。因为我不能只包含头文件,编译器会抛出错误,这些函数被多次定义。但是如何在类头中获取配置集?复制也不行,因为编译器抛出了一个错误,结构被定义了两次。

向前声明
configset
或将头文件中定义的函数声明为
inline

向前声明
configset
,或将头文件中定义的函数声明为
inline

使用转发声明如是:

// Forward declare configset. Tells compiler that the class/struct is defined in 
// another translation unit
struct configset;

class A {
public:
    static configset *getnext();
};

请注意,这只适用于只使用指向configset的指针的情况。

使用转发声明,如下所示:

// Forward declare configset. Tells compiler that the class/struct is defined in 
// another translation unit
struct configset;

class A {
public:
    static configset *getnext();
};

请注意,只要您只使用指向configset的指针,此操作就有效。

configset
方法的实现移动到一个单独的.cpp(非头文件)文件中。

configset
方法的实现移动到一个单独的.cpp(非头文件)文件中。

向前声明很好。谢谢。转发声明很好。谢谢。包含一个文件多次应该可以。如果编译器说函数被多次定义,那就意味着头的设计很糟糕。(A) 将函数定义(而不是声明)移动到cpp文件中,或者(B)将函数标记为
内联
。多次包含一个文件就可以了。如果编译器说函数被多次定义,那就意味着头的设计很糟糕。(A) 将函数定义(而不是声明)移动到cpp文件,或(B)将函数标记为
内联