sbl*_*yat 1 c++ struct namespaces function
我有一个在 header1.h 中声明的结构体 S,我需要在 header2.h 和 header2.cpp 中使用它(作为向量)。我相信我已经遵循了代码中已经存在的另一个类似示例,但我仍然收到错误,而且我不明白为什么。
这基本上是代码:
header1.h
#pragma once
namespace NSP
{
struct S{
float a;
int b;
};
class KPR
{
void funfun(int a); //struct S is used in funfun
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有 header1.cpp
#include "header1.h"
using namespace KPR;
using namespace std;
void KPR::funfun(int a)
{
S thisVec;
}
Run Code Online (Sandbox Code Playgroud)
然后我有 header2.h
#pragma once
#include "header1.h"
namespace NSP{
class header2
{
public:
header2(void);
~header2(void);
int func(NSP::S thisVec);
};
}
Run Code Online (Sandbox Code Playgroud)
当然还有 header2.cpp
#include "anotherHeader.h" //(a bunch of includes, amongst others #include header1.h)
header2::header2(void){
}
header2::~header2(void){
}
int header2::func(NSP::S thisVec)
{
}
Run Code Online (Sandbox Code Playgroud)
换句话说,
我遵循了 func 的另一个输入参数的结构,它也是一个结构,但在它自己的 .h 文件中声明(尽管具有相同的命名空间)。我通过使用 NSP::S 而不是 std::vectorNSP::S 稍微简化了问题,但它是相同的错误:此时,cpp 文件中的 func 下面有一个红色波形图,并且显示错误消息窗口func(.... thisVec ...) 而不是 NSP::S thisVec。我很困惑为什么会发生这种情况,有人可以解释一下发生了什么事吗?
问题是,在实现 class 的成员函数时NSP::header2
,您不在命名空间的范围内NSP
。本质上,您是在全局名称空间中(错误地)实现它们。换句话说,如果选择在类外部定义成员函数,那么它们必须在定义该类的同一命名空间中实现。这意味着它们应该在NSP
而不是全局名称空间中实现。
要解决此问题,请替换header2::header2
为NSP::header2::header2
如下所示:
#include "header2.h"
vvvvv------------------------->added this
NSP::header2::header2(void){
}
vvvvv------------------------->added this
NSP::header2::~header2(void){
}
int NSP::header2::func(NSP::S thisVec)
{
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120 次 |
最近记录: |