Недопустимое использование неполного типа на g ++

У меня есть два класса, которые зависят друг от друга:

class Foo; //forward declaration

template <typename T>
class Bar {
  public:
    Foo* foo_ptr;
    void DoSomething() {
      foo_ptr->DoSomething();
    }
};

class Foo {
  public:
    Bar<Foo>* bar_ptr;
    void DoSomething() {
      bar_ptr->DoSomething();
    }
};

Когда я компилирую его в g ++, это давало ошибку "Недопустимого использования неполного типа", но это было скомпилировано приятно в MSVC 10. Действительно ли возможно решить эту проблему при хранении объявления и определения в одном заголовочном файле? (никакие cpp файлы), Если это не позволяется в стандарте, так этот из MSVC "ошибка" или "функция"?

8
задан tshepang 15 May 2014 в 18:54
поделиться

2 ответа

Да, просто переместите определения методов из определения класса:

class Foo; //forward declaration

template <typename T>
class Bar {
  public:
    Foo* foo_ptr;
    void DoSomething();
};

class Foo {
  public:
    Bar<Foo>* bar_ptr;
    void DoSomething() {
      bar_ptr->DoSomething();
    }
};

// Don't forget to make the function inline or you'll end up
// with multiple definitions
template <typename T>
inline void Bar<T>::DoSomething() {
  foo_ptr->DoSomething();
}
8
ответ дан 5 December 2019 в 20:16
поделиться

оцифровка из ядра NumPy даст вам индекс ячейки, к которой принадлежит каждое значение в гистограмме:

import numpy as NP
A = NP.random.randint(0, 10, 100)

bins = NP.array([0., 20., 40., 60., 80., 100.])

# d is an index array holding the bin id for each point in A
d = NP.digitize(A, bins)     
-121--2268913-

Для решения этой проблемы можно написать атрибут ActionMethodAttribute , который проверяет MethodInfo для каждого действия и сравнивает его с разнесенными значениями Form, а затем отклоняет любой метод, для которого значения формы не совпадают (за исключением имени кнопки, конечно).

Вот пример: - http://blog.abodit.com/2010/02/asp-net-mvc-ambiguous-match/

Можно также создать более простой атрибут ActionMethodAttribute , который смотрит только на имя кнопки отправки, но будет более тесно связывать контроллер и просмотр.

-121--2823456-

См. следующую страницу: Каков лучший способ решения проблемы со-зависимыми классами в C++?

Он должен прояснить проблему и предоставить пару хороших решений.

0
ответ дан 5 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

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