#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.