Статические функции-члены в 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++ {РЕДАКТИРОВАТЬ:: Блог самостоятельно}

Другие вопросы по тегам