const_cast в c -получение ошибок

#c

#c

Вопрос:

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

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

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

Как вызвать some_func(const Foo amp; f)…Если я объявляю параметр const перед Foo в main, он показывает мне ошибку…
Но если я использую приведенный выше код, я получаю 2 ошибки..

вывод:

 1>------ Build started: Project: const_cast, Configuration: Debug Win32 ------
1>Compiling...
1>const_cast.cpp
1>c:documents and settingsbeatamy documentsvisual studio 2008projectsconst_castconst_castconst_cast.cpp(24) : error C2065: 'f' : undeclared identifier
1>c:documents and settingsbeatamy documentsvisual studio 2008projectsconst_castconst_castconst_cast.cpp(24) : error C2275: 'Foo' : illegal use of this type as an expression
1>        c:documents and settingsbeatamy documentsvisual studio 2008projectsconst_castconst_castconst_cast.cpp(8) : see declaration of 'Foo'
1>Build log was saved at "file://c:Documents and SettingsbeataMy DocumentsVisual Studio 2008Projectsconst_castconst_castDebugBuildLog.htm"
1>const_cast - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
  

Ответ №1:

Вероятно, ваша проблема связана с main()

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

Вам нужно объявить f , прежде чем вы сможете его использовать.

Ответ №2:

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

Ответ №3:

some_func(Foo amp;f); выглядит примерно как объявление и что-то вроде вызова функции. Если вы имели в виду вызов функции, вы просто передаете функции объект соответствующего типа. Например.

 Foo f;
some_func(f);
  

или, если вы хотите передать неназванный временный (допустимый, поскольку функция принимает постоянную ссылку):

 some_func(Foo());
  

Ответ №4:

Проблема, которую вы видите, заключается в том, что вы не обозначили вызов func функции как const , чтобы указать компилятору, что он не изменяет видимое состояние. Это,

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

будет работать нормально. Вы помещаете const в конце вызовов функций, когда они не изменяют состояние (не совсем верно, но более подробно для этого поста.)

Итак, если вы хотите передать объект с помощью const ref , вы сможете вызывать для него только те методы, которые были объявлены не изменяющими состояние. Пожалуйста, не используйте const_cast без крайней необходимости.

Кроме того, не забудьте объявить переменную типа Foo в вашем основном тексте.

Ответ №5:

 some_func(Foo amp;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.