结构和类错误

Struct and Class error

本文关键字:错误 结构      更新时间:2023-10-16

我有一个结构

在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();
};

主.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"的左侧必须具有类/结构/联合"

我确信这是我在结构上犯的一些简单的错误,但我环顾四周,在我看来一切都是正确的。谢谢

这不是家庭作业。我只是想重新开始编程,了解一些不同的东西是如何工作的,我正在做其他学校的旧作业。谢谢

您的关键问题是没有包含保护:当多次包含同一个头时,编译器会多次看到同一个定义,并且不喜欢这样!您需要防范这种情况,通常使用宏,例如:

// myStructure.h
#ifndef INCLUDED_MYSTRUCTURE
#define INCLUDED_MYSTRUCTURE
// struct definition goes here
#endif

(对于所有其他标头也是如此)。

由于在myClass.hmain.cpp中都包含了结构标头,因此会得到多个定义。您要使用include防护: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();
};

然后,您可以创建一个myClass:

myClass c;

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

c.setMyStructureData();