结构问题(C++)
Problems with Structs (C++)
我想使用Struct,但不知道在哪里定义它。这是我目前的代码:
头文件(Datos.h)
#ifndef DATOS_H
#define DATOS_H
using namespace std;
class Datos {
public:
Datos();
void rellenarDatos();
struct KeyData;
struct BBDD;
};
实现文件(Datos.cpp)
#include <string>
#include <string.h>
#include "Datos.h"
using namespace std;
Datos::Datos() {
};
struct KeyData {
int Key;
string data;
};
struct BBDD {
KeyData DNI[N];
KeyData Nombre[N];
KeyData Apellido[N];
KeyData Direccion[N];
};
void Datos::rellenarDatos() {
BBDD.DNI[i].Key = 100;
BBDD.Nombre[i].Key = 100;
BBDD.Apellido[i].Key = 100;
BBDD.Direccion[i].Key = 100;
BBDD.DNI[i].data = "hello";
BBDD.Nombre[i].data = "hello";
BBDD.Apellido[i].data = "hello";
BBDD.Direccion[i].data = "hello";
};
编译器会删除如下错误:
Datos.cpp:25:7: error: expected unqualified-id before ‘.’ token
BBDD.DNI[i].Key = 100;
问题出在哪里?谢谢
有几个问题。
首先,BBDD
是一种类型,而不是对象
这是错误消息的直接原因。
其次,在类定义中,在类Datos
的作用域中向前声明了两个structs。
它们的全名是Datos::KeyData
和Datos::BBDD
,所以要定义它们,可以编写
struct Datos::KeyData {
int Key;
string data;
};
struct Datos::BBDD {
Datos::KeyData DNI[N];
Datos::KeyData Nombre[N];
Datos::KeyData Apellido[N];
Datos::KeyData Direccion[N];
};
另一方面,看起来您想要一个类型为BBDD
的成员
在这种情况下,将定义放入类定义中:
class Datos {
public:
Datos();
void rellenarDatos();
struct KeyData {
int Key;
string data;
};
struct BBDD {
KeyData DNI[N];
KeyData Nombre[N];
KeyData Apellido[N];
KeyData Direccion[N];
};
BBDD bbdd;
};
// ...
void Datos::rellenarDatos() {
// ...
bbdd.DNI[i].Key = 100;
// ...
};
结构是类似于类的数据结构。您现在所做的是定义一个BBDD类型的数据结构。若要访问此结构的成员,您需要定义此结构的实例。您可以作为类中的类成员或作为全局变量来执行此操作。只是不要忘记,对于structs,您需要将关键字struct附加到定义中。
当您声明类的结构成员时,问题出现在头文件中:
struct KeyData;
struct BBDD;
当您定义一个结构时,它就变成了一个类型。如果要使用它,必须创建它的实例,而不是声明另一个结构。假设我想要一个名为Classroom的结构,它包含房间编号和在那里教授的科目。我会像你的.cpp文件中的结构一样定义它:
struct Classroom {
int roomNumber;
string subject;
}
现在,当我想使用它时,我使用Classroom,而不是struct:
Classroom myClassroom;
myClassroom.roomnumber = 25;
myClassroom.subject = "Computer Science";
所以在你的情况下,而不是写
struct KeyData;
struct BBDD;
你应该写:
KeyData KeyData;
BBDD BBDD;
尽管我建议更改结构名或实例名,使它们不完全相同,以避免混淆和潜在的编译器错误!
EDIT:请注意,这并不能解决代码中的所有错误-在未声明的变量片段中还有一些其他问题(如果.cpp中的"N"answers"i"在其他地方定义,则这对您来说可能不是问题),您必须根据需要将其声明或传递为参数,但以上内容将修复结构声明中的错误。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题