[英]expected primary-expression before ‘;’ token
我有这个课:
#pragma once
#include <iostream>
namespace Ispit
{
template <class T>
class Value
{
template <class Y>
friend std::ostream& operator<<(std::ostream&, const Value<Y>&) noexcept;
public:
Value() noexcept;
Value(T val) noexcept; //{ podatak = val;}
Value& operator()();
bool operator<(const Value&);
virtual void print(std::ostream&) const noexcept;
virtual ~Value();
protected:
T podatak;
};
template <class T>
std::ostream& operator<<(std::ostream& out, const Value<T>& val) noexcept
{
val.print(out);
return out;
}
template <class T>
Value<T>::Value() noexcept : podatak(T()) {}
template <class T>
Value<T>::Value(T val) noexcept //: podatak(T) {}
{
podatak = T; // this where the error occurs
}
template <class T>
Value<T>& Value<T>::operator()()
{
return podatak;
}
}
编译时出现此错误:
expected primary-expression before ‘;’ token
为什么会发生这种情况,我该如何解决?
我尝试在各个地方添加模板字,但没有找到变量规则(不确定这是否是thig)。
即使函数是内联的也不起作用...
编译器gcc 5.2.1
您正在为变量分配类型:
template <class T>
Value<T>::Value(T val) noexcept
{
podatak = T;
}
应该是:
template <class T>
Value<T>::Value(T val) noexcept
{
podatak = val;
}
或更妙的是,使用成员初始化列表:
template <class T>
Value<T>::Value(T val) noexcept : podatak(val) {}
另外,您可以删除默认构造函数,并将其与1参数构造函数组合:
// Remove this code
// template <class T>
// Value<T>::Value() noexcept : podatak(T()) {}
// Combine the above into this
template <class T>
Value<T>::Value(T val = T()) noexcept : podatak(val) {}
如果没有给出参数,上面的代码将默认构造T
类型,基本上将您的原始默认构造函数组合到1参数构造函数中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.