Предописание определения типа в C++

Вы пробовали это?

Окно сообщений веб-приложения ASP.NET

ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + message+ "');", true);

221
задан user96825 29 April 2009 в 13:21
поделиться

4 ответа

Вы можете выполнить forward typedef. Но чтобы сделать

typedef A B;

, вы должны сначала объявить A :

class A;

typedef A B;
161
ответ дан 23 November 2019 в 04:05
поделиться

В C ++ (но не в простом C) совершенно законно вводить определение типа дважды, если оба определения полностью идентичны:

// foo.h
struct A{};
typedef A *PA;

// bar.h
struct A;  // forward declare A
typedef A *PA;
void func(PA x);

// baz.cc
#include "bar.h"
#include "foo.h"
// We've now included the definition for PA twice, but it's ok since they're the same
...
A x;
func(&x);
17
ответ дан 23 November 2019 в 04:05
поделиться

Поскольку для объявления типа необходимо знать его размер. Вы можете перенаправить объявление указателя на тип или typedef указателя на тип.

Если вы действительно хотите, вы можете использовать идиому pimpl, чтобы отключить включения. Но если вы хотите использовать тип, а не указатель, компилятор должен знать его размер.

Редактировать: j_random_hacker добавляет к этому ответу важную квалификацию, в основном, размер должен быть известен, чтобы использовал тип, но предварительное объявление может быть сделано, если нам нужно только знать, что тип существует , чтобы создавать указатели или ссылки на тип. Поскольку OP не показывал код, но жаловался, что он не будет компилироваться, я предположил (вероятно, правильно), что OP пытался использовать тип, а не просто ссылаться на него.

10
ответ дан 23 November 2019 в 04:05
поделиться
- 4095193-

Для тех из вас, кто любит меня, которые стремятся пересылать структуру стиль C-стилей, который был определен с помощью Typedef, в некоторых C ++, я нашел решение, которое идет следующим образом ..

// a.h
 typedef struct _bah {
    int a;
    int b;
 } bah;

// b.h
 struct _bah;
 typedef _bah bah;

 class foo {
   foo(bah * b);
   foo(bah b);
   bah * mBah;
 };

// b.cpp
 #include "b.h"
 #include "a.h"

 foo::foo(bah * b) {
   mBah = b;
 }

 foo::foo(bah b) {
   mBah = &b;
 }
45
ответ дан 23 November 2019 в 04:05
поделиться
Другие вопросы по тегам:

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