C++ 不同名称空间中函数的专门化
当我试图构建代码时,我遇到了以下错误 src/Test.cxx:29:错误:模板T的专门化 com::check::one::Test::getValue(const std::string&)在不同的 命名空间。/incl/Test.hxx:30:错误:来自的定义 '模板T com::检查::一::测试::获取值(常量 std::string&)'src/Test.cxx:31:被先前的错误弄糊涂了,bailing 出去 头文件:C++ 不同名称空间中函数的专门化,c++,templates,C++,Templates,当我试图构建代码时,我遇到了以下错误 src/Test.cxx:29:错误:模板T的专门化 com::check::one::Test::getValue(const std::string&)在不同的 命名空间。/incl/Test.hxx:30:错误:来自的定义 '模板T com::检查::一::测试::获取值(常量 std::string&)'src/Test.cxx:31:被先前的错误弄糊涂了,bailing 出去 头文件: namespace com::check::one {
namespace com::check::one
{
class Test
{
public:
template<typename T>
T getValue(const std::string& var);
};
}
using namespace com::check::one;
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
namespace com::check::one
{
课堂测试
{
公众:
样板
T getValue(const std::string&var);
};
}
源文件:
namespace com::check::one
{
class Test
{
public:
template<typename T>
T getValue(const std::string& var);
};
}
using namespace com::check::one;
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
使用名称空间com::check::one;
样板
std::vector Test::getValue(const std::string&var)
{
//声明
}
我使用了正确的名称空间,并且包含了头文件。编译中没有问题。甚至我也在源文件中定义了测试类的其他成员函数。这些职能没有问题。只有具有模板的此函数存在问题。错误正在生成期间发生。有人能帮我解决这个问题吗?我希望cpp文件中有类似的内容:
namespace com {
namespace check {
namespace one {
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
}
}
}
更像java而不是C++。C++ - <代码>使用命名空间COM::CHECK::一;代码>。它是用来使用名称空间的,而不是用来定义名称空间中的内容。
我希望cpp文件中有类似的内容:namespace com {
namespace check {
namespace one {
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
}
}
}
更像java而不是C++。C++ - <代码>使用命名空间COM::CHECK::一;代码>。它是用来使用名称空间的,而不是用来定义其中的内容。
使用名称空间com.check.one代码>不是有效的语法。应该是:
using namespace com::check::one;
更好的是,将定义包装到命名空间中:
namespace com::check::one
{
class Test
{
public:
template<typename T>
T getValue(const std::string& var);
};
}
namespace com::check::one
{
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
}
namespace com::check::one
{
课堂测试
{
公众:
样板
T getValue(const std::string&var);
};
}
名称空间com::check::one
{
样板
std::vector Test::getValue(const std::string&var)
{
//声明
}
}
您还应该阅读。使用名称空间com.check.one代码>不是有效的语法。应该是:
using namespace com::check::one;
更好的是,将定义包装到命名空间中:
namespace com::check::one
{
class Test
{
public:
template<typename T>
T getValue(const std::string& var);
};
}
namespace com::check::one
{
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
}
namespace com::check::one
{
课堂测试
{
公众:
样板
T getValue(const std::string&var);
};
}
名称空间com::check::one
{
样板
std::vector Test::getValue(const std::string&var)
{
//声明
}
}
你也应该读一下。对不起,这里有打字错误。我在源代码中正确地定义了它。对不起,这里输入错误。我在源代码中正确地定义了它。