结构问题(C ++)

时间:2015-11-17 11:56:30

标签: c++ struct compiler-errors

我想使用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;

问题出在哪里?感谢。

3 个答案:

答案 0 :(得分:2)

有几个问题。

首先,BBDD是一种类型,而不是一种对象 这是错误消息的直接原因。

其次,在类定义中,您已在类Datos的范围内向前声明了两个结构。

这些的全名是Datos::KeyDataDatos::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声明修复错误。