Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] error: invalid use of incomplete type 'class Liczby_cal'

Ostatnio zmodyfikowano 2013-09-02 21:24
Autor Wiadomość
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
C/C++
#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 // LICZBY_PRZEC_H
plik Liczby_przec.cpp
C/C++
#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()
{
    //dtor
}
plik Liczby_cal.h
C/C++
#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()
{
    //dtor
}
plik Liczby_cal.cpp
C/C++
#ifndef LICZBY_CAL_H
#define LICZBY_CAL_H
class Liczby_przec;

class Liczby_cal
{
public:
    Liczby_cal( int );
    //     friend Liczby_przec::Liczby_przec(Liczby_cal);
    Liczby_cal( Liczby_przec );
    ~Liczby_cal();
    operator double() { return static_cast < double >( cal ); }
protected:
private:
    int cal;
};



#endif // LICZBY_CAL_H
plik main.cpp
C/C++
#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 :/
P-91445
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..
P-91446
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ć.
P-91450
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ć:
C/C++
class A;
class B
{
    friend class A;
};
P-91451
patrakus
Temat założony przez niniejszego użytkownika
» 2013-09-02 21:24:53
Dzięki działa :)
P-91452
« 1 »
  Strona 1 z 1