2013-12-17 3 views
0

У меня есть структураStruct и класс ошибки

Внутри 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» тип redefinition ", и" left of '.myInteger' должен иметь класс/struct/union "

Я уверен, что это некоторая простая ошибка, которую я сделал со структурой, но я огляделся, и все кажется быть верным моим нооблам. Благодаря!

И это не домашнее задание. Я просто пытаюсь вернуться к программированию и понять, как работают разные вещи, и я выполняю старые задания из других школ. Благодарю.

+1

Возможно, вы захотите начать добавление точки с запятой после определений вашего класса и структуры, чтобы избежать отвлечения от t hese missing. –

+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.h, так и в main.cpp. Вы хотите использовать включенные охранники: https://en.wikipedia.org/wiki/Include_guard.

Также в вашем main() вы пытаетесь получить доступ к частной функции-члену без экземпляра класса. Здесь есть несколько вопросов. Сначала вам нужен экземпляр. Однако вы не можете создать экземпляр в основном, потому что конструктор также является закрытым. Ваш myClass.h должен выглядеть следующим образом:

class myCLass 
{ 
private: 
    myStructure myStruct[4] 

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

Затем в главном вы можете создать myClass:

myClass c; 

И тогда вы можете вызвать функцию-член c (потому что я изменил его на публике, иначе вы все равно не будет позволено его называть):

c.setMyStructureData(); 
Смежные вопросы