Klasa w klasie.

iks de
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 97
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");

Kopiuj
syntax error: 'string'
expected a type specifier
Kopiuj
#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;


}
Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1792
2
Kopiuj
Klasa2 b("MA");

trochę na deklarację metody wygląda ;)

stivens
  • Rejestracja: dni
  • Ostatnio: dni
1
Miang napisał(a):
Kopiuj
Klasa2 b("MA");

trochę na deklarację metody wygląda ;)

Nie tak do konca.

To np jest calkiem poprawne

Kopiuj
#include <iostream>
#include <string>

int main()
{
    std::string hello("Hello, world!\n");
    std::cout << hello;
}
TomaszLiMoon
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 530
1

Użyj {}-Initialization

Kopiuj
 Klasa2 b {"MA"};

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

Kopiuj
class Klasa1
{
    Klasa2 b;
public:
    Klasa1(): b("MA") {};
};
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1

Miało być tak:

Kopiuj
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).

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1
TomaszLiMoon napisał(a):

lub delegate constructor ( kompatybilny z C++98 )

Kopiuj
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:

Kopiuj
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;
};

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.