c++ - GCC:“BLAH 的定义不在命名空间中”
问题描述
我试图在 VCVRack 中找出一些东西。
在模板.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++,我不会尝试重新定义名称。我在 Template.hpp 文件中声明了名称 SlowSliderWidget 和 SlowSliderWidget::draw,我只是尝试在 MyWidget.cpp 文件中定义 draw 的函数体。
那么为什么我会收到一条错误消息?措辞似乎暗示我不在同一个命名空间中。但在这两个文件中,我都在命名空间机架中。我不是吗?
解决方案
推荐阅读
- batch-file - 在批处理脚本的 For 循环中使用 if-else 语句时无法获得所需的结果或输出
- prolog - Prolog,使用关系后输出变量
- azure - 如何使用自动化帐户 PowerShell Runbook 重置 Azure 服务主体的凭据?
- javascript - JS 更改元素的颜色 Onclick 未定义的颜色
- css - 背景过滤器:模糊不适用于绝对位置元素
- visual-studio - unity 自动重新编译(循环)
- php - Laravel Livewire 搜索和过滤关系
- python - 您可以在多个类中导入相同的模块(Python 中接受的约定是什么)?
- r - 从 R 会话调用 Rscript 时出错:.libPaths() 是“半”继承的
- html - 如何使用 python 解析本地存储的 html 中的链接?