构造函数上的C++方法链接
C++ Method chaining on constructor
我正在尝试允许构造函数上的方法链接,我在这个C++方法链接(包括类构造函数)上遇到了同样的问题,我尝试了建议的答案,但仍然得到了同样的错误。我的代码如下:
class Signal {
public:
Signal() { }
Signal& Emphasize() {
return *this;
}
};
enum ReadType { NATIVE = 0, DOUBLE, };
class Wav : public Signal {
public:
Wav(string fileName, ReadType type) {
}
};
我试着从以下地方打电话:
Wav* wave = new Wav("asf", DOUBLE).Emphasize();
和:
Wav wave = Wav("asf", DOUBLE).Emphasize();
我不知道实际的过程是否可能,因为"强调"它不是一个构造函数,但希望我能被允许访问它。如果不起作用,我会做错什么?
希望有人能帮忙:)
更新:
我把"强调()"作为一个类成员放在"Wav"中,它按照我的意愿工作。但是有人知道一种方法吗?我可以在"Signal"中访问该成员,而不必将该类成员放置在"Wav"中?
更新:
class Signal {
public:
Signal() { }
Signal* Emphasize() {
return this;
}
};
enum ReadType {
NATIVE = 0, DOUBLE,
};
class Wav : public Signal {
public:
Wav(string fileName, ReadType type) {
}
};
int main(int argc, char *argv[]) {
Wav* wave = new Wav("asf", DOUBLE)->Emphasize();
}
new
表达式返回一个指针,所以您只需要执行以下操作:
Wav* wave = new Wav("asf", DOUBLE)->Emphasize();
// ^^
此外,您的方法Emphasize
返回Signal对象上的引用:
Signal& Emphasize() {
// ^ Reference
return *this;
}
但是您正试图将此引用分配给一个指针Wav*
。
这里有两个选择:
// ...
Signal* Emphasize() {
return this;
}
// ...
Wav* wave = new Wav("asf", DOUBLE)->Emphasize();
或者你保持你的首字母Emphasize
方法:
// ...
Signal& Emphasize() {
return *this;
}
// ...
Wav wave = new Wav("asf", DOUBLE)->Emphasize();
编辑:好的,真正的错误是您试图将Signal
对象转换为Wav
对象。
没有从Signal
到Wav
对象的转换。
Wav是信号,但信号不是Wav
你可以做一些类似的事情:
在您的Signal
类内部:
virtual Signal& Emphasize()=0;
在您的Wav
类中:
Wav& Emphasize()
{
return *this;
}
或
Signal w = new Wav( "asf", DOUBLE )->Emphasize();
你在找这样的东西吗?
Wav* wave = new Wav("asf", DOUBLE);
Signal x = wave->Emphasize();
或者,如果你想在最后使用Wav对象,你可以在Signal类中虚拟地定义强调()
virtual Signal& Emphasize()=0;
然后在Wav类中,您可以定义
Wav& Emphasize(){
return *this;
}
总的来说,你可以打电话给
Wav* wave = new Wav("asf", DOUBLE);
Wav w = wave->Emphasize();
相关文章:
- 使用类模板的方法链接错误
- 为什么调用没有正文的纯虚拟方法不会导致链接器错误?
- 在使用库时,找到要链接的必要库的快速方法是什么
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- 将多个效果与 libSox 链接并读取输出数据的正确方法
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- 从方法链接中使用的临时移动
- 使用 CMake 的静态方法链接错误
- 标准::字符串::空的未定义符号错误;Mac OS High Sierra 上的 c++ 标准方法链接错误
- 返回值上的 C++ 方法链接不起作用
- 方法链接中的C++执行顺序
- 将错误与静态方法链接
- 具有多态性 C++ 的方法链接
- 构造函数上的C++方法链接
- 重新加载了序列点和方法链接
- 来自命名空间的方法链接
- 方法链接导致编译错误
- 方法链接的缩进
- 垃圾回收如何处理这些由方法链接创建的静态实例
- 将内联非成员操作符的声明和定义分开的正确方法(链接器问题)