如何在头文件中使用尚未定义的数据类型
how to use not yet defined datatypes in a header?
我在linux上使用g++编程,我经常遇到这样的问题,我需要在我稍后定义的头文件中使用类或数据类型,要么在头文件的稍后点,要么在另一个头文件中。
例如:
class example
{
mydatatype blabla;
};
struct mydatatype
{
int blablainteger;
char blablachar;
};
这将给出错误,因为mydatatype在其定义之前被使用所以我通常会这样修改:
struct mydatatype; // <-- class prototype
class example
{
mydatatype *blabla; // <-- now a pointer to the data type
// I will allocate the data during runtime with the new operator
};
struct mydatatype
{
int blablainteger;
char blablachar;
};
现在它工作了。我通常可以把定义放在上面,或者包括需要的头,但我不想在头中包括头或打乱定义顺序,它总是变得混乱。
我展示的解决方案通常有效,但现在我遇到了一个新现象。这一次,数据类型不是一个类,而是一个typedef,我不能使用typedef的原型,我不想使用typedef合并的实际数据类型。它也很乱。
有什么解决办法吗?
首先,您想到的解决方案(原型和指针)是不必要的,并且比不使用指针实现它要慢。
对此的"适当"解决方案是为每种类型创建单独的头,然后将它们包含在其他头中。这样它将永远被定义!您甚至可以使它们相互包含。
但是,如果您曾经打开过g++提供的.h
文件,那么您很可能在头文件的开头看到这个:
#ifndef SOMETHING_H
#define SOMETHING_H
// Code
#endif /* SOMETHING_H */
这是为了解决类型重新定义自己的问题。
如果它们不在那里,并且您多次包含头文件,则类型将被重新定义,并且会抛出错误。这使得类型总是出现,但不会包含两次。
我希望这对你有帮助!
将每个类/类型放在它自己的头文件中,然后将相关的头文件包含在需要的其他头文件中。在每个header中使用包含保护符,例如:
// SomeHeaderFile.h
#ifndef SOME_HEADER_FILE_H
#define SOME_HEADER_FILE_H
// code
#endif
我不同意这是混乱的-它允许你有一个有组织的结构,你的项目,它允许每个类的操作独立于其他的,而不用担心顺序,这是一个好主意,把每个类放在自己的文件
你可以在另一个类中定义这个类,比如
template<class T>
class vertex {
private:
class edge {
public:
vertex<T> *to;
double weight;
edge() {
weight = INFINITY;
to = NULL;
};
} *paths;
T data;
unsigned nof_paths;
public:
vertex(T val) {
data = val;
paths = NULL;
nof_paths = 0;
}
void addPathTo(vertex<T>*&);
edge* getAllPaths() {
return paths;
};
};
显然这适用于小班…如果你的类是巨大的,你最好使用单独的头文件,就像其他人说的。
相关文章:
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- C++哈希表 - 如何解决自定义数据类型作为键的unordered_map冲突?
- 从自定义数据类型向量中删除重复元素
- C++:自定义数据类型向量错误的队列
- 交换未定义数据类型中的字节顺序
- 在 C++ 中设置的用户定义数据类型
- C++ - 按自定义数据类型向量的值删除元素
- 类型特征检查 CRTP 派生,在基类中,问题是未定义的类型
- 使用算法标头查找自定义数据类型的minmax
- 如何将自定义数据类型(用std::对填充的std::数组)写入文件流
- 从自定义数据类型向量数组C 删除
- 模板函数实例化 自定义数据类型的问题
- 我可以让我自己的自定义数据类型比C++中的数据类型大吗
- 派生类错误:未定义的类型
- 未分配返回未定义对象类型引用的 C++ 函数的返回值时会发生什么情况
- 在从抽象类继承的模板类中正确使用未定义的类型
- 使用QStandardItem传输自定义数据(类型*)时内存泄漏
- 子类中使用了不完整的指针-错误:使用了未定义的类型
- C++中的"auto"是否可以识别自定义数据类型?
- C++模板,在编译时解析未定义的类型