Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不同名称空间中函数的专门化_C++_Templates - Fatal编程技术网

C++ 不同名称空间中函数的专门化

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 {

当我试图构建代码时,我遇到了以下错误

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
{
    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)
{
//声明
}
}

你也应该读一下。

对不起,这里有打字错误。我在源代码中正确地定义了它。对不起,这里输入错误。我在源代码中正确地定义了它。