2014-09-03 2 views
-2

У меня возникли проблемы с печатью того, что у меня есть в файле заголовка. Когда я помещаю весь свой код только в файл cpp, все работает, но когда я пытаюсь использовать заголовочный файл, он не запускается.Использование structs в файлах заголовков C++

это мой файл заголовка, vet.h

#ifndef Vet 
#define Vet 

class LIST 
{ 
private: 
    struct PET 
    { 
     string last_name; 
     string pet; 
     string animal; 
     string color; 
     int dob; 
}; 
//enter data 
public: 
void Read 
{ 
    cout<<"Your pets first name: "; 
    cin>>PET.pet; 
    cin.ignore(); 
    cout<<"Your last name: "; 
    cin>>PET.last_name; 
    cin.ignore(); 
    cout<<"What kind of animal do you have: "; 
    cin>>PET.animal; 
    cin.ignore(); 
    cout<<"Your animals dob: "; 
    cin>>PET.dob; 
    cin.ignore(); 
    cout<<"Your animals color: "; 
    cin>>PET.color; 
    cin.ignore(); 
} 
}; 
#endif 

и это мой файл CPP, Veterinary.cpp

//read from header file 
#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <algorithm> 
#include "Vet.h" 
using namespace std; 
int main() 
{ 
LIST P; 

P.Read(); 

system("pause"); 
return 0; 
} 
+4

'недействительным Read' ->' аннулируются Read() ' –

+4

И' #include ... '+' 'станд :: в заголовке .. – quantdev

+5

' PET' - это имя типа, а не переменной. Вам нужно создать экземпляр 'PET', прежде чем вы сможете установить его поля. –

ответ

0

Класс не имеет элемент данных типа ПЭТ так член функция Read является недействительным. Вам необходимо определить член данных типа ПЭТ, в котором вы будете вводить данные о своих домашних животных. C++ не имеет анонимных структур.

Также учтите, что директива, использующая пространство имен std, должна быть помещена перед этим заголовком с определением класса. Также было бы лучше, если бы вы включили заголовки <iostream> и <string> в свой заголовок и вместо использования директивы используйте квалифицированные стандартные имена.

Заголовок может выглядеть

#ifndef Vet 
#define Vet 

#include <iostream> 
#include <string> 

class LIST 
{ 
private: 
    struct PET 
    { 
     std::string last_name; 
     std::string pet; 
     std::string animal; 
     std::string color; 
     int dob; 
    } pet_data; 

//enter data 
public: 
    void Read() 
    { 
     std::cout<<"Your pets first name: "; 
     std::cin>>pet_data.pet; 
     std::cout<<"Your last name: "; 
     std::cin>>pet_data.last_name; 
     std::cout<<"What kind of animal do you have: "; 
     std::cin>>pet_data.animal; 
     std::cout<<"Your animals dob: "; 
     std::cin>>pet_data.dob; 
     std::cout<<"Your animals color: "; 
     std::cin>>pet_data.color; 
    } 
}; 

#endif 
+0

* «C++ не имеет анонимных структур. *« Если вы не считаете временные. :) – cdhowie

+0

@cdhowie temporaries не являются анонимными структурами. Они неназванные структуры. Это разные понятия. –

+0

для файла cpp, я бы включил использование пространства имен std ;? – user3326689

Смежные вопросы