我有一个结构
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”
我确信这是我用结构做出的一个简单的错误,但是我环顾四周,一切似乎都是正确的。谢谢!
这不是功课。我只是想回到编程,并了解一些不同的东西是如何工作的,而我正在从其他学校做旧的任务。感谢。
答案 0 :(得分:4)
你的关键问题是你没有包含防护:当多次包含相同的头时,编译器多次看到相同的定义并且不喜欢它!您需要防范,通常使用宏,例如:
// myStructure.h
#ifndef INCLUDED_MYSTRUCTURE
#define INCLUDED_MYSTRUCTURE
// struct definition goes here
#endif
(同样适用于所有其他标题)。
答案 1 :(得分:1)
您获得了多个定义,因为您在myClass.h
和main.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();