我正在组建一个C++类,但我遇到了一个我可以解决的错误,但是我不太明白.
我正在尝试使用以下标头(main.h):
#include <git2.h>
class Test
{
public:
private:
git_repository gitRepo;
};
Run Code Online (Sandbox Code Playgroud)
和以下文件(main.cpp):
#include "main.h"
int main(int argc, char *argv[]){
Test test;
}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个"Test :: gitRepo'使用未定义的结构'git_repository'".结构实际上并没有未定义,因为如果我使用指向结构而不是结构本身的指针...
git_repository * gitRepo;
Run Code Online (Sandbox Code Playgroud)
......编译得很好.
git_repository的类型声明如下:
typedef struct git_repository git_repository;
Run Code Online (Sandbox Code Playgroud)
我grepped整个include树,这是代码中唯一的typedef或struct定义.这是否表明实际的struct定义隐藏在实际的库实现中,但不包含在头文件中?
因为编译器将其git_repository视为不完整类型.
编译器无法查看结构的定义,git_repository因此将其视为不完整类型.这意味着您不能要求编译器执行任何需要编译器知道结构大小或布局的操作.您仍然可以声明指向结构的指针,因为指向结构的指针总是具有相同的大小,而不管它是哪种结构.
如果需要创建结构的实例,编译器必须查看结构的定义,并且必须包含定义类型的标头.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |