我想使用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;
问题出在哪里?感谢。
答案 0 :(得分:2)
有几个问题。
首先,BBDD
是一种类型,而不是一种对象
这是错误消息的直接原因。
其次,在类定义中,您已在类Datos
的范围内向前声明了两个结构。
这些的全名是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;
// ...
};
答案 1 :(得分:0)
结构是类的数据结构。您现在所做的是定义BBDD类型的数据结构。要访问此结构的成员,您需要定义此结构的实例。您既可以作为类中的类成员,也可以作为全局变量。只是不要忘记使用结构,您需要将关键字struct附加到您的定义中。
答案 2 :(得分:0)
当您声明类的结构成员时,您的问题出现在Header文件中:
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;
...虽然我建议更改结构名称或实例名称,以便它们不相同,以避免混淆和潜在的编译器错误!
编辑:请注意,这不能解决您的代码中的所有错误 - 您在未声明的变量片段中有一些其他问题(如果你的“N”和“i”,这可能不是你的问题。 cpp在别处定义)你必须根据需要声明或传递参数,但上面将用你的struct声明修复错误。