结构和类错误

时间:2013-12-17 20:00:29

标签: c++ class struct structure

我有一个结构

myStructure.h内部

struct myStructure
{
    int myInteger;
    double myDoublesArray[4];
    char myCharArray[79];

};

在myClass.h中

#include "myStructure.h"

class myClass
{
private:
    myStructure myStruct[4]

private:
    Prog1Class();
    ~Prog1Class();
    void setMyStructData();
};

在main.cpp内部

#include<iostream>
#include <string>
#include "myClass.h"
#include "myStructure.h"

using namespace std;

void myClass::setMyStructData()
{
    for(int i = 0; i < 5 ; i++)
    {
        cout << "Please enter an integer: " << endl;
        cin >> myStruct[i].myInteger;

        for(int j = 0; j< 5; j++)
        {
            cout << "Please enter a double: ";
            cin >> myStruct[i].myDoublesArray[j];
        }

        cout << endl << "Please enter a string: ";
        cin.ignore(256, '\n');
        cin.getline(myStruct[i].myCharArray, 79, '\n');
    }
}

int main(void)
{
    setStructData();

    cin.get()
}

我得到的错误是“'myStructure':'struct'类型重新定义”,而“.myInteger'的左边必须有class / struct / union”

我确信这是我用结构做出的一个简单的错误,但是我环顾四周,一切似乎都是正确的。谢谢!

这不是功课。我只是想回到编程,并了解一些不同的东西是如何工作的,而我正在从其他学校做旧的任务。感谢。

2 个答案:

答案 0 :(得分:4)

你的关键问题是你没有包含防护:当多次包含相同的头时,编译器多次看到相同的定义并且不喜欢它!您需要防范,通常使用宏,例如:

// myStructure.h
#ifndef INCLUDED_MYSTRUCTURE
#define INCLUDED_MYSTRUCTURE

// struct definition goes here

#endif

(同样适用于所有其他标题)。

答案 1 :(得分:1)

您获得了多个定义,因为您在myClass.hmain.cpp中都包含了结构标头。您想使用包含警戒:https://en.wikipedia.org/wiki/Include_guard

同样在你的main()中,你试图访问一个私有成员函数而没有该类的实例。这里有一些问题。首先,您需要一个实例。但是,您无法在main中创建实例,因为构造函数也是私有的。您的myClass.h应如下所示:

class myCLass
{
private:
    myStructure myStruct[4]

public:  // NOTE public here
    Prog1Class();
    ~Prog1Class();
    void setMyStructData();
};

然后在main中,您可以创建myClass

myClass c;

然后你可以在c上调用成员函数(因为我将其更改为public,否则你仍然不允许调用它):

c.setMyStructureData();