Klasa w klasie.

0

Witam. Mam taki kod czy jest możliwość w jakiś sposób aby to działało?

Błąd jest w Klasa2 b("MA");

syntax error: 'string'
expected a type specifier
#include <string>

class Klasa2 {

public:

    int dlugosc;

    Klasa2(std::string obiekt) {

        obiekt = "ALA " + obiekt + " KOTA";
        dlugosc = obiekt.length();

    }

};

class Klasa1 {

    Klasa2 b("MA");

public:

};

int main() {

    Klasa1 a;

    return 0;

}
2
Klasa2 b("MA");

trochę na deklarację metody wygląda ;)

1
Miang napisał(a):
Klasa2 b("MA");

trochę na deklarację metody wygląda ;)

Nie tak do konca.

To np jest calkiem poprawne

#include <iostream>
#include <string>

int main()
{
    std::string hello("Hello, world!\n");
    std::cout << hello;
}
1

Użyj {}-Initialization

 Klasa2 b {"MA"};

lub za pomocą initialization list ( kompatybilny z C++98 )

class Klasa1
{
    Klasa2 b;
public:
    Klasa1(): b("MA") {};
};
1

Miało być tak:

class Klasa1 {
    Klasa2 b {
        "MA"
    };

public:

};

Domyśle inicjalizacje pól jest dostępne od C++11 i tylko używając przypisania lub brace initialization.
Stary styl inicjalizacji dla domyślnej wartości pól jest niedostępny z powodu możliwej niejednoznaczności (nie mam przykładu).

1
TomaszLiMoon napisał(a):

lub delegate constructor ( kompatybilny z C++98 )

class Klasa1
{
    Klasa2 b;
public:
    Klasa1(): b("MA") {};
};

To nie jest przykład delegate constructor ale przykład na initialization list.

delegate constructor jest dostępny od C++11 i wygląda tak:

class Foo
{
public:
   Foo(const std::string& a) : s{a}
   {}

   Foo(int x) : Foo(std::to_string(x)) // tu masz delegację do Foo(const std::string&) 
   {}

private:
   std::string s;
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0