Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++;编译错误_C++ - Fatal编程技术网

C++ 模糊不清的C++;编译错误

C++ 模糊不清的C++;编译错误,c++,C++,有谁能就此提出建议: In file included from recorders/r5000channel.h:13:0, from recorders/r5000channel.cpp:11: recorders/dtvchannel.h:53:18: warning: ‘virtual bool DTVChannel::Tune(const IPTVTuningData&)’ was hidden [-Woverloaded-virtual] virt

有谁能就此提出建议:

In file included from recorders/r5000channel.h:13:0,
             from recorders/r5000channel.cpp:11:
recorders/dtvchannel.h:53:18: warning: ‘virtual bool DTVChannel::Tune(const IPTVTuningData&)’ was hidden [-Woverloaded-virtual]
 virtual bool Tune(const IPTVTuningData&) { return false; }
              ^
In file included from recorders/r5000channel.cpp:11:0:
recorders/r5000channel.h:29:18: warning:   by ‘virtual bool R5000Channel::Tune(const DTVMultiplex&, QString)’ [-Woverloaded-virtual]
 virtual bool Tune(const DTVMultiplex &/*tuning*/, QString /*inputname*/)
              ^
In file included from recorders/r5000channel.h:13:0,
             from recorders/r5000channel.cpp:11:
recorders/dtvchannel.h:65:18: warning: ‘virtual bool DTVChannel::Tune(const QString&, int)’ was hidden [-Woverloaded-virtual]
 virtual bool Tune(const QString &freqid, int finetune)
              ^
In file included from recorders/r5000channel.cpp:11:0:
recorders/r5000channel.h:29:18: warning:   by ‘virtual bool R5000Channel::Tune(const DTVMultiplex&, QString)’ [-Woverloaded-virtual]
 virtual bool Tune(const DTVMultiplex &/*tuning*/, QString /*inputname*/)
              ^
In file included from recorders/r5000channel.h:13:0,
             from recorders/r5000channel.cpp:11:
recorders/dtvchannel.h:71:18: warning: ‘virtual bool DTVChannel::Tune(uint64_t, QString)’ was hidden [-Woverloaded-virtual]
 virtual bool Tune(uint64_t frequency, QString inputname)
              ^
In file included from recorders/r5000channel.cpp:11:0:
recorders/r5000channel.h:29:18: warning:   by ‘virtual bool R5000Channel::Tune(const DTVMultiplex&, QString)’ [-Woverloaded-virtual]
 virtual bool Tune(const DTVMultiplex &/*tuning*/, QString /*inputname*/)
R5000通道.h-


R5000 channel.cpp-

请注意,这不是一个错误,而是一个警告。您的基类似乎包含名为
Tune
virtual
函数的重载版本:当您重写其中一个基类时,使用派生对象时,基类中的所有版本都将隐藏。通常情况下,这是无意的,处理过载的
虚拟
函数的正常方法是使
虚拟
函数受保护,从
公共
转发(可能是
内联
)函数委托给它们。例如,请参见
std::num_get
中的
virtual
函数

另一种避免隐藏的方法是使用
声明和
虚拟
函数的重写提供
。就个人而言,我更喜欢转发方式

显示的警告实际上来自头文件。这意味着您正在使用的库是松散的,或者您创建了一个有点松散的基类

下面是一个示例,显示了问题以及在注释中的修复:

struct base
{
    virtual void foo(int) {}
    virtual void foo(bool) {}
};

struct derived: base
{
    virtual void foo(int) {}
    // add this: using base::foo;
};

int main()
{
}
使用编译上述代码时,我收到以下消息(缩写为仅显示编译器版本和警告):


添加注释时,警告将消失(如预期)。

无法发现任何错误,仅警告!对应的代码是什么?上面说有个方法被隐藏了,但是搜索“C++方法隐藏”将为您提供比我在这个小评论中所能提供的更多的资源。因为你不是C++程序员。也许开发人员可以帮助开发这个端口。我很想在神话邮件列表上询问,但是他们的政治已经取消了这个补丁的工作。这就是为什么我要试着让它继续运行,这样我就不会失去我在硬件上1千美元的投资。艾伦·尼索塔(Alan Nisota)三年前放弃了对it(原始开发人员)的支持。我已经在这方面取得了很大的进步,并且已经通过归纳推理将其编译。不过,我仍有一些警告需要纠正。我不知道所引用的数据结构,所以我想问的是关于它们是什么的一些说明,或者我应该采取的具体行动。谢谢迪特玛。我不是一个有经验的程序员,所以我不清楚你说什么应该做。我注意到,大多数错误都与DTV(DirecTV)有关,这将不会用于我的目的。这是卫星系统,而不是作为目标系统的碟形网络。如果这相当简单的话,我想修正这些警告。dtvchannel.h在这里:@user3033518:在每个只重写
Tune()
重载的子集的类中,您可以使用
using::Tune
其中
是相应基类的名称。这样做应该会扼杀警告。然而,请注意,当它改变重载解析的函数时,它也可能改变语义。从第一个警告开始,问题似乎出现在dtvchannel.h行53中。我相信你是说它隐藏了Tune(),因为它以前就被使用过,但我不知道把‘using::Tune;’放在哪里,或者如何确定类别。(对不起)也许没人愿意再帮忙了,但我想我现在更明白这一点了。从dtvchannel.cpp上的警告开始:很明显,Tune()是在第51行定义的。但随后在第53、65和71行中立即对其进行了重新定义,所有这些都在我的错误中指出。阅读Dietmar的消息并进行搜索,我发现存在“受保护的虚拟bool”这样的东西,因此它是合法的,但为什么原始开发人员要定义,然后立即重新定义Tune()?这没有道理,它们没有被重新定义!这些参数被重载,即,您可以使用不同的参数调用
Tune()
,编译器将选择最佳匹配。在派生类中重写其中一个函数时,基类中的重载将被隐藏,除非您使用base::Tune添加
(其中
Base
需要替换为派生类的基类)。
$ g++ -v -c -Woverloaded-virtual overloaded-virtual.cpp
[...]
GNU C++ (GCC) version 4.9.0 20131031 (experimental) (x86_64-apple-darwin13.0.0)
    compiled by GNU C version 4.9.0 20131102 (experimental), GMP version 5.0.5, MPFR version 3.1.1, MPC version 1.0.1
[...]
overloaded-virtual.cpp:4:22: warning: ‘virtual void base::foo(bool)’ was hidden [-Woverloaded-virtual]
         virtual void foo(bool) {}
                      ^
overloaded-virtual.cpp:9:22: warning:   by ‘virtual void derived::foo(int)’ [-Woverloaded-virtual]
         virtual void foo(int) {}
                      ^