Статические функции-члены в namesapce
У меня есть статическая функция-член внутри моего класса, которую я хотел бы добавить в свое пространство имен.
class A{
public:
static void func();
};
namespace myNamespace{
void A::func(){
...
}
}
int main(){
myNamespace::A::func;
}
Я получаю следующие ошибки:
- ошибка: определение 'void A::func()' не находится в пространстве имен, включающем 'A' [-fpermissive]
- ошибка: "myNamespace::A" не было объявлено myNamespace::A::func(); void A::func(){
какова причина?
2 ответа
Решение
Потому что вы помещаете функцию, которая принадлежит классу А, в пространство имен. просто сделайте класс и функцию A вместе внутри пространства имен, ваш код должен быть таким
namespace myNamespace {
class A {
public:
static void func();
};
void A::func() {
}
}
int main()
{
myNamespace::A::func;
return 0;
}
Объявление и определение должны находиться внутри пространства имен, чтобы оно работало. Здесь, в вашем коде, вы объявили класс вне пространства имен. Вы можете исправить это следующим образом.
namespace myNamespace{
class A{
public:
static void func();
};
void A::func(){
...
}
}
int main(){
myNamespace::A::func;
}
Также постарайтесь понять сообщения об ошибках, которые сэкономят вам много времени на поиск в Google.
https://www.crashhandler.com/ ---> Лучшие практики в C++ {РЕДАКТИРОВАТЬ:: Блог самостоятельно}