相关疑难解决方法(0)

为什么编译器没有检测到错误的正确函数签名?

问题是参考这个,这是在不久前发布的.
尽管OP很乐意接受解决了他的问题的答案,但我对于为什么编译器给出了看似错误的错误的细节感到有点兴趣.

下面是我创建的一个小代码示例,用于演示相同的代码:

    class YourClass
    {
    };

    class YourClass2
    {
    };
    class MyClass
    {
        public:
            void doSomething(YourClass2 obj)
            {
                //Nothing more Interesting to do
            }

    };

    int main()
    {
        YourClass *ptr = new YourClass();
        MyClass obj;
        obj.doSomething(ptr);

        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

编译海湾合作委员会(4.3.4)给出了一个看似奇怪的错误的结果:

prog.cpp: In function ‘int main()’:
prog.cpp:23: error: no matching function for call to ‘MyClass::doSomething(YourClass*&)’
prog.cpp:13: note: candidates are: void MyClass::doSomething(YourClass2)
Run Code Online (Sandbox Code Playgroud)

问题是:
为什么编译器会处理呼叫,

obj.doSomething(ptr);
Run Code Online (Sandbox Code Playgroud)

作为对原型的函数的调用,

MyClass::doSomething(YourClass*&)
Run Code Online (Sandbox Code Playgroud)

并不是

MyClass::doSomething(YourClass*)
Run Code Online (Sandbox Code Playgroud)

这似乎是一个明显的例子.

c++ gcc function

7
推荐指数
2
解决办法
372
查看次数

标签 统计

c++ ×1

function ×1

gcc ×1