移动构造函数抱怨"非类类型"
Move Constructor Complaining about "non-class type"
所有人,我正在与理解R-Value,L-Value以及Scott Meyers所说的"通用参考"一起玩耍。我在设置自己的示例时遇到了一些麻烦,如下所示。谁能提供一些指导?
#include <cstdio>
namespace who_needs_namespaces {
class SomeSillyClass {
public:
SomeSillyClass() {
printf("Default constructed.n");
}
SomeSillyClass(const SomeSillyClass& rhs) {
printf("L-Value constructed.n");
}
SomeSillyClass(SomeSillyClass&& rhs) {
printf("R-Value Constructed.n");
}
void doStuff() const {
printf("doing...n");
}
};
template<typename T>
class HolderByValue {
public:
HolderByValue() = delete;
HolderByValue(T toHold) : m_mine(toHold)
{ };
private:
T m_mine;
};
template<typename T>
class HolderByRef {
public:
HolderByRef() = delete;
HolderByRef(T&& toHold) : m_mine(toHold)
{ };
private:
T m_mine;
};
}
using namespace who_needs_namespaces;
int main() {
//Check our silly class.
SomeSillyClass defaultCtr;
defaultCtr.doStuff();
SomeSillyClass copyCtr(defaultCtr);
copyCtr.doStuff();
SomeSillyClass moveCtr(SomeSillyClass);
moveCtr.doStuff();
//Check our HolderByValue
//HolderByValue<SomeSillyClass> holder(defaultCtr);
HolderByValue<SomeSillyClass &> holder(defaultCtr);
}
main.cpp: In function 'int main()':
main.cpp:59:13: error: request for member 'doStuff' in 'moveCtr', which is of non-class type 'who_needs_namespaces::SomeSillyClass(who_needs_namespaces::SomeSillyClass)'
我认为您已经成为斯科特·迈耶斯(Scott Meyers)所说的C 最烦人的解析的受害者。https://en.wikipedia.org/wiki/most_vexing_parse
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 构造函数正在调用一个使用当前类类型的函数
- 如何修复函数样式强制转换或类型构造的预期"("?
- 具有默认模板类型的默认构造函数的类型推导
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 不命名构造函数和析构函数上的类型错误
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 初始化自定义类型构造函数的数组
- OpenGL着色器错误C1068:类型构造函数中的数据过多
- Lambda 闭包类型构造函数
- 仅当基础类型具有模板类型构造函数时,才实现这些构造函数
- 模板类的构造函数在使用 new 关键字时调用类型构造函数
- 如何强制函数参数为相同类型,并且不允许使用类型构造函数与给定类型匹配
- 模板类型构造函数参数
- 它们是c++中的类型构造函数
- 解析C++类型构造函数