Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » forward-deklaration

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.04.2004, 10:52 Uhr
(un)wissender
Niveauwart


Das geht nicht, was mache ich falsch?
(Ich hoffe, ich muss nicht weiter erklären...)


C++:
#include <iostream>
class test;

class test2
{
public:
    void ausgabe(const test &t) const
    {
        std::cout << t.out() << std::endl; //Wenn diese Zeile auskommentiert ist, dann compiliert es.
    }
};

class test
{
public :
    void go() const
    {  
        test2 t2;  
        t2.ausgabe(*this);
    }

    int out() const
    {
        return 5;
    }
};



int main(int argc, char * args[])
{
    test t;
    t.go();
    return 0;
}


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 29.04.2004 um 10:53 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.04.2004, 11:09 Uhr
(un)wissender
Niveauwart


Hm, ich glaube das geht so gar nicht...habt ihr eine Idee?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.04.2004, 11:11 Uhr
0xdeadbeef
Gott
(Operator)


Noch ein guter Grund, Deklaration und Implementierung zu trennen. Machs so:

C++:
#include <iostream>

class test;

class test2
{
public:
    void ausgabe(const test &t) const;
};

class test
{
public :
    void go() const;
    int out() const;
};

void test2::ausgabe(const test &t) const
{
  std::cout << t.out() << std::endl;
}

void test::go() const
{  
  test2 t2;  
  t2.ausgabe(*this);
}

int test::out() const
{
  return 5;
}

int main(int argc, char * args[])
{
    test t;
    t.go();
    return 0;
}


...und trenn den Kram bei der Gelegenheit am besten gleich in mehrere Dateien auf.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 29.04.2004 um 11:12 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.04.2004, 11:14 Uhr
(un)wissender
Niveauwart


Oh...
Ich Idiot, danke!
Das Beispiel ist nur konstuiert (nee, kein Code vom Windowskernel), aber es zeigt mir, wie ich ein anderes Problem lösen kann!
Vielen Dank!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.04.2004, 11:24 Uhr
(un)wissender
Niveauwart


So, da das klappt, die nächste Stufe, könnte eigentlich auch bei den Rätseln stehen...

Klasse test2 soll die private(!) Klasse Internal von test kennen und zum Freund haben (Das muss nicht unbedingt sein).

Ich haben keinen Plan, ob das realisierbar ist!


C++:
#include <iostream>

class test;

class test2
{
public:
    friend class test::internal;
    void ausgabe(const test::internal &t) const;  
};

class test
{
private:
    class internal
    {
        int out() const;      
    };
    
public :
    void go() const;
    
};

//Implementation
void test2::ausgabe(const  test::internal &t) const
{
  std::cout << t.out() << std::endl;
}

void test::go() const
{  
  test2 t2;  
  internal inter;
  t2.ausgabe(inter);
}

int test::testInternal::out() const
{
  return 5;
}

int main(int argc, char * args[])
{
    test t;
    t.go();
    return 0;
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.04.2004, 13:27 Uhr
0xdeadbeef
Gott
(Operator)



C++:
// test.hh

#ifndef TEST_HH_INCLUDED
#define TEST_HH_INCLUDED

class test2;

class test
{
  friend class test2;

private:
  class internal
    {
    public:
      int out() const;
    };

  public :
    void go() const;
};

#endif



C++:
// test2.hh

#ifndef TEST2_HH_INCLUDED
#define TEST2_HH_INCLUDED

#include "test.hh"

class test2
{
  friend class test::internal;
public:
  void ausgabe(const test::internal &t) const;
};

#endif



C++:
// test.cc

#include "test.hh"
#include "test2.hh"

void test::go() const
{
  test2 t2;
  internal inter;
  t2.ausgabe(inter);
}

int test::internal::out() const
{
  return 5;
}



C++:
// test2.cc

#include <iostream>

#include "test.hh"
#include "test2.hh"

void test2::ausgabe(const  test::internal &t) const
{
  std::cout << t.out() << std::endl;
}



C++:
// main.cc

#include "test.hh"

int main(int argc, char * args[])
{
    test t;
    t.go();
    return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 29.04.2004 um 13:38 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.04.2004, 17:39 Uhr
(un)wissender
Niveauwart


Vielen Dank, das zeigt, dass ich noch einiges in C++ lernen muss!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: