[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 » |