const ++中的c ++ -getting错误

时间:2011-04-24 13:21:48

标签: c++

include "stdafx.h"
#include <iostream>
using namespace std;

class Foo{
public:
    void func()
    {
        cout<<"Hello!!"<<endl;
    }
};

void some_func(const Foo &f)
{
    //f.func();
    Foo &fr=const_cast<Foo&>(f);
    fr.func();
}
int main()
{
    some_func(Foo &f); //if const declared will add the no of errors from 2 to 3
    return 0;
}

如何调用some_func(const Foo&amp; f)...如果我在main中的Foo参数之前声明了const,它会显示错误... 但如果我使用上面的代码我会得到2个错误..

输出:

1>------ Build started: Project: const_cast, Configuration: Debug Win32 ------
1>Compiling...
1>const_cast.cpp
1>c:\documents and settings\beata\my documents\visual studio 2008\projects\const_cast\const_cast\const_cast.cpp(24) : error C2065: 'f' : undeclared identifier
1>c:\documents and settings\beata\my documents\visual studio 2008\projects\const_cast\const_cast\const_cast.cpp(24) : error C2275: 'Foo' : illegal use of this type as an expression
1>        c:\documents and settings\beata\my documents\visual studio 2008\projects\const_cast\const_cast\const_cast.cpp(8) : see declaration of 'Foo'
1>Build log was saved at "file://c:\Documents and Settings\beata\My Documents\Visual Studio 2008\Projects\const_cast\const_cast\Debug\BuildLog.htm"
1>const_cast - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

5 个答案:

答案 0 :(得分:2)

你的问题可能是main()

int main()
{
    Foo f;
    some_func(f);
    return 0;
}

您必须先声明f才能使用它。

答案 1 :(得分:2)

int main()
{
    Foo f;
    some_func(f);
    return 0;
}

答案 2 :(得分:2)

some_func(Foo &f);看起来像一个声明,类似于函数调用。如果你的意思是函数调用,你只需将适当类型的对象传递给函数。 E.g。

Foo f;
some_func(f);

或者如果你想传递一个未命名的临时(合法,因为该函数采用const引用):

some_func(Foo());

答案 3 :(得分:1)

您遇到的问题是您没有将func函数调用标记为const,以向编译器指示它不会修改可见状态。也就是说,

class Foo{
public:
    void func() const{
        std::cout << "Hello World!" << std::end;
    }
};

会正常工作。当你不修改状态时,你将const放在函数调用的末尾(对于这篇文章来说,这不是完全正确但更高级。)

因此,如果您想通过const ref传递一个对象,那么您将只能调用已声明为非状态修改的方法。除非绝对必要,否则请不要使用const_cast

另外,不要忘记在主体中声明类型为Foo的变量。

答案 4 :(得分:1)

some_func(Foo &f); //if const declared will add the no of errors from 2 to 3

语法错误。

以下是您应该做的事情:

Foo f; //f is an object of type Foo
some_func(f); //pass the object to the function.