当我尝试构建代码时出现以下错误。
src / Test.cxx:29:错误:'模板T的专业化 com :: check :: one :: Test :: getValue(const std :: string&)'在不同的地方 namespace ./incl/Test.hxx:30:错误:来自定义 'template T com :: check :: one :: Test :: getValue(const std :: string&)'src / Test.cxx:31:被早先的错误搞糊涂了 出
标题文件:
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
}
我正在使用正确的命名空间并包含头文件。编译时没有问题。甚至我已经在源文件中定义了Test Class的其他成员函数。这些功能没有问题。只有这个函数有问题才有模板。错误是在构建期间。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
using namespace 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
}
}
另外,您应该阅读Why can templates only be implemented in the header file。
答案 1 :(得分:1)
我希望在cpp文件中有这样的东西:
// Get external data with fetch
const data = fetch('data.json').then(response => response.json());
// Get external template with fetch
const template = fetch('template.mst').then(response => response.text());
// wait for all the data to be received
Promise.all([data,template])
.then(response => {
resolvedData = response[0];
resolvedTemplate = response[1];
// Cache the template for future uses
Mustache.parse(resolvedTemplate);
var output = Mustache.render(resolvedTemplate, resolvedData);
// Write out the rendered template
return document.getElementById('target').innerHTML = output;
}).catch(error => console.log('Unable to get all template data: ', error.message));
此:
namespace com {
namespace check {
namespace one {
template<>
std::vector<std::string> Test::getValue(const std::string& var)
{
//statements
}
}
}
}
更像是Java而不是C ++。 C ++ - using namespace com.check.one;
。它用于使用命名空间,而不是用于定义命名空间。