[C++] error: invalid use of incomplete type 'class Liczby_cal'
Ostatnio zmodyfikowano 2013-09-02 21:24
patrakus Temat założony przez niniejszego użytkownika |
[C++] error: invalid use of incomplete type 'class Liczby_cal' » 2013-09-02 19:56:41 plik Liczby_przec.h #ifndef LICZBY_PRZEC_H #define LICZBY_PRZEC_H
class Liczby_cal;
class Liczby_przec { public: Liczby_przec( double ); Liczby_przec( Liczby_cal ); ~Liczby_przec(); operator double() { return przec; } friend Liczby_cal::Liczby_cal( Liczby_przec prze ); protected: private: double przec; };
#endif
plik Liczby_przec.cpp #include "Liczby_przec.h" #include "Liczby_cal.h"
Liczby_przec::Liczby_przec( double p ) { przec = p; }
Liczby_przec::Liczby_przec( Liczby_cal ca ) { przec = static_cast < double >( ca.cal ); }
Liczby_przec::~Liczby_przec() { } plik Liczby_cal.h #include "Liczby_cal.h" #include "Liczby_przec.h"
Liczby_cal::Liczby_cal( int c ) { cal = c; }
Liczby_cal::Liczby_cal( Liczby_przec prze ) { cal = static_cast < int >( prze.przec ); }
Liczby_cal::~Liczby_cal() { } plik Liczby_cal.cpp #ifndef LICZBY_CAL_H #define LICZBY_CAL_H class Liczby_przec;
class Liczby_cal { public: Liczby_cal( int ); Liczby_cal( Liczby_przec ); ~Liczby_cal(); operator double() { return static_cast < double >( cal ); } protected: private: int cal; };
#endif
plik main.cpp #include <iostream> #include "Liczby_cal.h" #include "Liczby_przec.h"
using namespace std;
double dodaj( double a, double b ) { return a + b; }
int main() { Liczby_cal calk( 5 ); Liczby_przec przeci( 11.1 ); cout << dodaj( calk, przeci ) << endl; return 0; } Problem z Klasami polega na tym że dostaje takowe komunikaty w trakcie kompilacji: ||=== ćwiczenia9 (Konstruktor konertującjy), Debug ===| C:\Users\Patryk\Documents\CodeBlocks\ćwiczenia\ćwiczenia9 (Konstruktor konertującjy)\Liczby_przec.h|13|error: invalid use of incomplete type 'class Liczby_cal'| C:\Users\Patryk\Documents\CodeBlocks\ćwiczenia\ćwiczenia9 (Konstruktor konertującjy)\Liczby_przec.h|4|error: forward declaration of 'class Liczby_cal'| C:\Users\Patryk\Documents\CodeBlocks\ćwiczenia\ćwiczenia9 (Konstruktor konertującjy)\Liczby_cal.h||In constructor 'Liczby_przec::Liczby_przec(Liczby_cal)':| C:\Users\Patryk\Documents\CodeBlocks\ćwiczenia\ćwiczenia9 (Konstruktor konertującjy)\Liczby_cal.h|15|error: 'int Liczby_cal::cal' is private| C:\Users\Patryk\Documents\CodeBlocks\ćwiczenia\ćwiczenia9 (Konstruktor konertującjy)\Liczby_przec.cpp|11|error: within this context| ||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===| Wie ktoś jak temu zaradzić? I przepraszam że kod nie jest w ramce ale nie wiem jak się ją robi :/ |
|
pekfos |
» 2013-09-02 20:36:18 Sama deklaracja klasy tu nie wystarczy. I przepraszam że kod nie jest w ramce ale nie wiem jak się ją robi :/ |
Zielona ramka pod "Załóż nowy temat". Ale to było trudne do znalezienia.. |
|
patrakus Temat założony przez niniejszego użytkownika |
» 2013-09-02 21:07:12 Tyle to już sam się domyśliłem, ale dalej nie wiem jak to naprawić. |
|
DejaVu |
» 2013-09-02 21:13:55 Jeżeli chcesz na poziomie definicji klasy A znać definicję klasy B i vice versa to znaczy, że źle zaprojektowałeś swój kod. W ostateczności możesz zadeklarować klasę A przed klasą B i napisać: class A; class B { friend class A; };
|
|
patrakus Temat założony przez niniejszego użytkownika |
» 2013-09-02 21:24:53 Dzięki działa :) |
|
« 1 » |