GCC: «определение BLAH не входит в пространство имен» - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь что-то выяснить в VCVRack.

В Template.hpp

using namespace rack;
...
struct SlowSliderWidget : public OpaqueWidget {
    void draw(NVGcontext *vg) override;
};

затем в MyWidget.cpp

#include "Template.hpp"

namespace rack {

void SlowSliderWidget::draw(NVGcontext *vg) {
    nvgBeginPath(vg);
    nvgRect(vg, 0, 0, 100, 100);
    nvgFill(vg);
}

} // namespace rack

Это дает мне следующую ошибку компилятора:

g++  -Wsuggest-override -std=c++11  -DSLUG=Template -fPIC -I../../include -I../../dep/include -DVERSION=0.6.0 -MMD -MP -g -O3 -march=nocona -ffast-math -fno-finite-math-only -Wall -Wextra -Wno-unused-parameter -DARCH_LIN -c -o build/src/MyWidget.cpp.o src/MyWidget.cpp
src/MyWidget.cpp:6:43: error: definition of ‘void SlowSliderWidget::draw(NVGcontext*)’ is not in namespace enclosing ‘SlowSliderWidget’ [-fpermissive]
 void SlowSliderWidget::draw(NVGcontext *vg) {
                                           ^
../../compile.mk:64: recipe for target 'build/src/MyWidget.cpp.o' failed

Теперь, просматривая, я нахожу различные жалобы на этот тип ошибки в GCC.

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

Но если я понимаю мой C ++ здесь, я НЕ пытаюсь переопределить имя. Я объявляю имя SlowSliderWidget и SlowSliderWidget :: draw в файле Template.hpp и просто пытаюсь определить тело функции draw в файле MyWidget.cpp.

Так почему я получаю сообщение об ошибке? Формулировка, кажется, подразумевает, что я не в том же пространстве имен. Но в обоих файлах я в стойке пространства имен. Не я?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...