C++ - 2 класса 1 файл

Консольные приложения Windows могут выводить широкие строки (L"...") непосредственно на терминал, если режим установлен правильно. Обратите внимание на использование wcout. Сохраните следующий источник в кодировке UTF-8:

#include <iostream>
#include <io.h>
#include <fcntl.h>

using namespace std;

int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    wcout << L"┏━━━━━━━━━━━━━━━━━┓" << endl;
    wcout << L"┃" << endl;
}

Скомпилируйте с помощью «cl / EHsc / utf-8 test.cpp». Выход:

┏━━━━━━━━━━━━━━━━━┓
┃
5
задан RiaD 14 September 2013 в 17:55
поделиться

8 ответов

помещенный в первую строку:

class B;
22
ответ дан 18 December 2019 в 05:15
поделиться

Если я помню хорошо, можно 'предварительно объявить' класс B.

class B; // predeclaration of class B

class A
{
   public:
      void doSomething(B* b);
}

class B
{
    public
      void doSomething(A* a) {}
}

public void A::doSomething(B* b) {}

Затем Ваш класс ',' знание, что класс 'B' будет, существует, хотя он еще не был действительно определен.

Предописание является действительно правильным термином, как упомянуто Evan Teran в комментариях.

12
ответ дан 18 December 2019 в 05:15
поделиться

Да. Вам нужно предописание:

class B; // add this line before A's declaration

class A {
    public:
        void doSomething(B *b) {};
};

class B {
    public:
        void doSomething(A *a) {};
};
3
ответ дан 18 December 2019 в 05:15
поделиться

вперед объявите один класс перед другим с

class B;
or
class A;

Но тем не менее Вы не сможете реализовать

void doSomething(B *b)

использование только предописания B. Таким образом, необходимо поместить определение doSomething ниже полного объявления класса A

4
ответ дан 18 December 2019 в 05:15
поделиться

FAQ C++ Облегченные ответы этот вопрос и другие. Я был бы, серьезно рассматривая читающий ту вещь вплотную, или получающий книгу и делающий то же.

3
ответ дан 18 December 2019 в 05:15
поделиться

Можно попробовать предописание как

class B;
class A {
  void Method( B* );
};
class B{
};

но Вы только сможете объявить указатель и ссылочные переменные для B затем. Если Вы хотите больше (как метод, который разыменовывает B* переменная), можно обеспечить объявление только и определить методы позже в том же файле - в точке, где оба объявления классов уже доступны.

1
ответ дан 18 December 2019 в 05:15
поделиться

Необходимо передать, объявляют B.

class B; 

class A
{
public:        
   void doSomething(B *b) {}
};

class B 
{    
public:        
   void doSomething(A *a) {}
};

(И BTW, Вам не нужны точки с запятой после фигурных скобок функции членства.:))

1
ответ дан 18 December 2019 в 05:15
поделиться

Добавьте другое объявление B прежде A:

class B;

class A {
    public:
        void doSomething(B *b) {};
};

class B {
    public:
        void doSomething(A *a) {};
};
0
ответ дан 18 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: