#include ?
-
Die include-Guards sollten natürlich für jede Datei _anders_ sein

-
rüdiger schrieb:
Die include-Guards sollten natürlich für jede Datei _anders_ sein

sind se doch!
oder meinst du des mit hpp-inluded??
-
Hi,
du musst die "Include guards" in deinen unterschiedlichen Headern auch unterschiedlich nennen.
Bei Dir wird erst in der Kugel.hpp nachgeschaut, ob PROGRAMM_HPP_INCLUDED definiert ist. Da es nicht definiert ist, wird es definiert und es folgt die Funktionsdeklaration.
Daraufhin wird in der Kreis.hpp nachgeschaut, ob PROGRAMM_HPP_INCLUDED definiert ist. Da dies jetzt schon definiert ist ( in der kugel.hpp ) wird der ganze folgende Teil ausgelassen und somit wird die Funktion Kreis() nicht deklariert.Als Fehlermeldung erhältst du dann wie bei Dir halt, dass die Funktion Kreis nicht deklariert ist.
-
das heißt ich muss die alle anders benennen,
ok dann mach ich des ma.
Kann ich die nennen wie ich will, also auch KREIS_INCLUDED?
-
Ist egal, wie du sie benennst ... sie sollten halt eindeutig sein. Ich hab häufig eine abgeänderte Form des Dateinamens als Include-Guard gesehen.
d.h. wenn die Datei "Kreis.hpp" heisst -> #define KREIS_HPP
oder so ähnlich.
-
@ALL: Vielen herzlichen Dank!
Ihr könnt das Thema jetzt beenden.
The Smart
-
The Smart schrieb:
Ihr könnt das Thema jetzt beenden.
Ich mach noch kurz C++ draus

#include "tools.hpp" #include "circle.hpp" #include "sphere.hpp" enum do_t { do_exit, do_circle, do_sphere }; int main( ) { int choice( do_exit ); double radius( 0 ); do { std::cout << "Welche Figur moechten Sie berechnen?\n\n\t1:\tKreis\n\t2:\tKugel\n\n\t0:\tEnde\n" << std::endl; choice = read_value< int >( std::cin, true, do_exit, do_sphere ); if( choice != do_exit ) { std::cout << "\nBitte geben Sie einen Radius ein:" << std::endl; radius = read_value< double >( std::cin ); } std::cout.put( '\n' ); switch( choice ) { case do_circle: { std::cout << circle_t( radius ) << std::endl; break; } case do_sphere: { std::cout << sphere_t( radius ) << std::endl; break; } case do_exit: { std::cout << "Das Programm wird beendet." << std::endl; } } std::cout.put( '\n' ); } while( choice != do_exit ); }tools.hpp
#ifndef TOOLS_INCLUDED #define TOOLS_INCLUDED TOOLS_INCLUDED #include <iostream> template< typename T > T read_value( std::istream &input_stream, bool range_check = false, T lower = T( ), T upper = T( ) ) { T value = T( ); while( !( input_stream >> value ) || ( range_check && ( value < lower || upper < value ) ) ) { std::cout << "Fehlerhafte Eingabe.\n\nBitte wiederholen:" << std::endl; std::cin.clear( ); std::cin.ignore( std::cin.rdbuf( )->in_avail( ), '\n' ); } return value; } #endif /* TOOLS_INCLUDED */circle.hpp
#ifndef CIRCLE_INCLUDED #define CIRCLE_INCLUDED KREIS_HPP_INCLUDED #include <iostream> class circle_t { private: double m_radius; double m_area; double m_outline; public: circle_t( double radius ); double get_radius( ) const; double get_area( ) const; double get_outline( ) const; }; std::ostream& operator<<( std::ostream &output_stream, const circle_t &circle ); #endif /* CIRCLE_HPP_INCLUDED */circle.cpp
#define _USE_MATH_DEFINES /* M_PI is a nonstandard extension */ #include <cmath> #include "circle.hpp" circle_t::circle_t( double radius ): m_radius( radius ), m_area( radius * radius * M_PI ), m_outline( 2 * radius * M_PI ) { } double circle_t::get_radius( ) const { return m_radius; } double circle_t::get_area( ) const { return m_area; } double circle_t::get_outline( ) const { return m_outline; } std::ostream& operator<<( std::ostream &output_stream, const circle_t &circle ) { return output_stream << "Der Umfang des Kreises betraegt " << circle.get_outline( ) << ",\ndie Flaeche " << circle.get_area( ); }sphere.hpp
#ifndef SPHERE_INCLUDED #define SPHERE_INCLUDED SPHERE_INCLUDED #include <iostream> class sphere_t { private: double m_radius; double m_surface_area; double m_volume; public: sphere_t( double radius ); double get_radius( ) const; double get_surface_area( ) const; double get_volume( ) const; }; std::ostream& operator<<( std::ostream &output_stream, const sphere_t &sphere ); #endif /* SPHERE_INCLUDED */sphere.cpp
#define _USE_MATH_DEFINES /* M_PI is a nonstandard extension */ #include <cmath> #include "sphere.hpp" sphere_t::sphere_t( double radius ): m_radius( radius ), m_surface_area( 4. * M_PI * radius * radius ), m_volume( ( 4. / 3. ) * M_PI * radius * radius * radius ) { } double sphere_t::get_radius( ) const { return m_radius; } double sphere_t::get_surface_area( ) const { return m_surface_area; } double sphere_t::get_volume( ) const { return m_volume; } std::ostream& operator<<( std::ostream &output_stream, const sphere_t &sphere ) { return output_stream << "Die Oberflaeche der Kugel betraegt " << sphere.get_surface_area( ) << ",\ndas Volumen " << sphere.get_volume( ); }greetz, Swordfish