2013-12-17 1 views
0

나는 구조체를구조체와 클래스 오류

내부 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': '구조체' 타입 재정의 ",".myInteger의 왼쪽 "은 클래스/구조체/공용체를 가져야합니다.

구조체로 만든 간단한 실수이지만 모든 것을 둘러 보았습니다. 내 멍청이 눈에 옳다. 감사!

그리고 숙제가 아닙니다. 나는 프로그래밍으로 돌아가서 다른 것들이 어떻게 작동 하는지를 이해하려고 노력하고 있으며 다른 학교에서 오래된 과제를하고 있습니다. 감사.

+1

클래스와 구조체의 정의 뒤에 세미콜론을 추가하여 시작하지 않아도됩니다. hese 누락. –

+1

'Prog1Struct.h' 란 무엇인가요? myStructure.h입니까? – clcto

+0

세미콜론을 추가했습니다. 이미 답변이 게시되었습니다. 하하. – trueCamelType

답변

4

당신의 핵심 문제는 당신이 포함하는 경비원이 없다는 것입니다 : 동일한 헤더를 여러 번 포함 할 때 컴파일러는 동일한 정의를 여러 번보고 그것을 좋아하지 않습니다! 당신은 일반적으로 (모든 다른 헤더에 대한 마찬가지로) :,

// myStructure.h 
#ifndef INCLUDED_MYSTRUCTURE 
#define INCLUDED_MYSTRUCTURE 

// struct definition goes here 

#endif 

을 예컨대을 매크로를 사용하여, 그 방지 할 필요가있다.

+0

안녕하세요, 고맙습니다. 거의 모든 오류가 수정되었습니다. 그래도 여전히 1 오류가 발생합니다. 내 main() 내부에서 setStructData() 함수를 호출하면 setStructData 식별자를 찾을 수 없다는 메시지가 표시됩니다. – trueCamelType

+0

@Slimmons : 컴파일러는 짜증나게하고, 당신이 쓴 것을 당신이 의미하는 것이 아닌 완고하게 읽습니다! 'setMyStructData'라고 쓰고 싶습니까? 또한이 멤버 함수를 사용하려면 객체에 호출해야합니다 ... –

+0

덕분에 모든 문제가 해결되었으므로 도움과 정보에 감사드립니다. – trueCamelType

1

구조 헤더를 myClass.hmain.cpp에 모두 포함하므로 여러 정의가 나타납니다. 포함 경비원 : https://en.wikipedia.org/wiki/Include_guard을 사용하려고합니다.

main() 또한 클래스의 인스턴스가 없어도 개인 멤버 함수에 액세스하려고합니다. 여기에 몇 가지 문제가 있습니다. 먼저 인스턴스가 필요합니다. 그러나 생성자가 private이기 때문에 main에 인스턴스를 만들 수 없습니다. 귀하의 myClass.h는 다음과 같이한다 :

class myCLass 
{ 
private: 
    myStructure myStruct[4] 

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

는 다음 주에 당신이 myClass 만들 수 있습니다

:

myClass c; 

을 내가 대중에게 그것을 변경 되었기 때문에 다음 (c의 멤버 함수를 호출 할 수 있습니다, 그렇지 않으면 당신에게 여전히 호출 할 수 없습니다) :

c.setMyStructureData();