• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C++ - błąd kompilacji programu rozdzielonego na 3 pliki - błąd przy zmiennej globalnej w pliku nagłówkowym

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
735 wizyt
pytanie zadane 8 stycznia 2017 w C i C++ przez heros22pt Użytkownik (950 p.)
zamknięte 9 stycznia 2017 przez heros22pt

Witam, mam problem z podanym kodem:

osoby.h:

#ifndef OSOBY_H
#define OSOBY_H

#include<iostream>
#include<list>

list<Osoba> baza_osob;
struct Osoba
{
	char imie[20]{};
	char nazwisko[20]{};
	int wiek{};
	double waga{};
	int wzrost{};
};

Osoba wczytaj(Osoba nowa);
void dodaj_osobe_do_listy(Osoba &do_dodania);

#endif

osoby.cpp:

//#include<iostream>
#include"osoby.h"
using namespace std;

Osoba wczytaj(Osoba nowa)
{
	cout << "\nimie: ";
	cin.getline(nowa.imie, 20);
	cout << "\nnazwisko: ";
	cin.getline(nowa.nazwisko, 20);
	cout << "\nwaga: ";
	cin >> nowa.waga;
	cout << "\nwiek: ";
	cin >> nowa.wiek;
	cout << "\nwzrost: ";
	cin >> nowa.wzrost;

	return nowa;
}
void dodaj_osobe_do_listy(Osoba &do_dodania)
{
	wczytaj(do_dodania);
	
	baza_osob.push_back(do_dodania);
}

main.cpp:

#include"osoby.h"

using namespace std;
int main()
{

	Osoba testowa;
	//	testowa.wiek = 15;


	//wczytaj(testowa);
	system("pause");



	int menu;
	cin >> menu;
	switch (menu)
	{
	case 1:
	{
		dodaj_osobe_do_listy(testowa);
	}
	}
}

nie rozumiem dla czego podany program nie kompiluje się i wyświetla (w VS2013) podane błędy:

1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(7): error C2143: syntax error : missing ';' before '<'
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(7): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(10): warning C4351: new behavior: elements of array 'Osoba::imie' will be default initialized
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(11): warning C4351: new behavior: elements of array 'Osoba::nazwisko' will be default initialized
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.cpp(24): error C2065: 'baza_osob' : undeclared identifier
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.cpp(24): error C2228: left of '.push_back' must have class/struct/union
1>          type is 'unknown-type'
1>  main.cpp
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(7): error C2143: syntax error : missing ';' before '<'
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(7): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(10): warning C4351: new behavior: elements of array 'Osoba::imie' will be default initialized
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\cwiczenia_9,10\zadanie10_1-2-3\zadanie10_1-2-3\osoby.h(11): warning C4351: new behavior: elements of array 'Osoba::nazwisko' will be default initialized
 

przede wszystkim chodzi mi o znaczenie błędu:

 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

oraz o to jak go naprawić.

z góry dziękuję za pomoc 

komentarz zamknięcia: dzięki za odpowiedź, zamykam temat

1 odpowiedź

+1 głos
odpowiedź 8 stycznia 2017 przez timrh Mądrala (6,010 p.)
wybrane 9 stycznia 2017 przez heros22pt
 
Najlepsza

"missing type specifier" - Brakujący typ

int wiek{};
double waga{}; 
int wzrost{};

Co to ma być? Jakaś hybryda pomiędzy funkcją a zmienną?

komentarz 8 stycznia 2017 przez timrh Mądrala (6,010 p.)

Zastosuj cin.ignore();

Osoba wczytaj(Osoba nowa)
{
	cin.ignore();
	cout << "\nimie: ";
	cin.getline(nowa.imie, 20);
	cout << "\nnazwisko: ";
	cin.getline(nowa.nazwisko, 20);
	cout << "\nwaga: ";
	cin >> nowa.waga;
	cout << "\nwiek: ";
	cin >> nowa.wiek;
	cout << "\nwzrost: ";
	cin >> nowa.wzrost;

	return nowa;
}

 

komentarz 9 stycznia 2017 przez heros22pt Użytkownik (950 p.)

dzięki, naj yes

komentarz 9 stycznia 2017 przez unknown Nałogowiec (39,560 p.)

Co to ma być? Jakaś hybryda pomiędzy funkcją a zmienną?

To jest jak najbardziej poprawne.

http://en.cppreference.com/w/cpp/language/data_members

komentarz 9 stycznia 2017 przez timrh Mądrala (6,010 p.)
No właśnie nie za bardzo dla zmiennych typów liczbowych które nie są tablicami lub tablic które nie mają ustalonych elementów podczas deklaracji.
komentarz 9 stycznia 2017 przez unknown Nałogowiec (39,560 p.)
Jest to poprawne dla wszystkich niestatycznych i niestałych zmiennych w klasie/strukturze.

Podobne pytania

0 głosów
2 odpowiedzi 758 wizyt
pytanie zadane 7 lipca 2017 w C i C++ przez TheFeniks Gaduła (4,690 p.)
0 głosów
2 odpowiedzi 319 wizyt

93,443 zapytań

142,434 odpowiedzi

322,691 komentarzy

62,805 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...