命名空间中的类,怎么吧 main 函数声明为友元函数

时间:2022-09-08 08:59:56
这样写不行

#include <stdio.h>

namespace name
{
class Test
{
private:
Test()
{
}
~Test()
{
}
void Run()
{
printf("run");
}

friend int main();
};
};

int main()
{
name::Test *pT = new name::Test;
pT->Run();
delete pT;

return 0;
}

----------------------------------------------------------------

这样还是不行

#include <stdio.h>

namespace name
{
class Test
{
private:
Test()
{
}
~Test()
{
}
void Run()
{
printf("run");
}

friend int ::main();
};
};

int main()
{
name::Test *pT = new name::Test;
pT->Run();
delete pT;

return 0;
}



----------------------------------------------------------------

编译通过了,链接就不行了

#include <stdio.h>

namespace name
{
class Test
{
private:
Test()
{
}
~Test()
{
}
void Run()
{
printf("run");
}

friend int main();
};
};

int name::main()
{
name::Test *pT = new name::Test;
pT->Run();
delete pT;

return 0;
}

9 个解决方案

#1


lz 还挺 ep


main 就是一个名称而已

#2


但是 main 函数类型是编译器预先定义好的

只能用第三种方案,再增加一个入口main 函数

int main()
{
name::main();

return 0;
}

#3


引用 1 楼 fox000002 的回复:
lz 还挺 ep


main 就是一个名称而已


啥意思?  不明白

#4


引用 2 楼 fox000002 的回复:
但是 main 函数类型是编译器预先定义好的

只能用第三种方案,再增加一个入口main 函数

C/C++ code
int main()
{
    name::main();
    
    return 0;
}


额  这个方法我也想到了,感觉看着有点不自然

#5



真ep!!

#include <iostream.h>

namespace name
{
class Test
{
public:
Test()
{
}
~Test()
{

void Run()
{
cout<<"run";
}

friend int main();
};
};

int main()
{
name::Test *pT = new name::Test;
pT->Run();
delete pT;


return 0;
}


#6


引用 5 楼 jake443403168 的回复:
真ep!!
C/C++ code

#include <iostream.h>

namespace name
{
    class Test
    {
    public:
        Test()
        {
        }
        ~Test()
        {
        } 
        void Run()
        {
      ……


晕。。。  定义成 public 当然是可以了

#7


这样的代码在codeblocks下自带的gcc编译运行成功,而在cygwin下编译成功,但运行时栈出错.
include <iostream>

namespace name
{
extern "C" int main()    ;
class Test
{
    friend int main();
private:
    Test()
    {
        std::cout<<"run"<<std::endl;
    }
    ~Test()
    {
    }

};

extern "C" int main()
{
    name::Test t;

    return 0;
}

#8


上面尾部少一大括号.
把main函数也放入命名空间.

此等做法,没啥大意思.

#9


引用 8 楼 ljljlj 的回复:
上面尾部少一大括号.
把main函数也放入命名空间.

此等做法,没啥大意思.


visual studio 2008 下编译失败,gcc (MinGW) 下编译失败

#1


lz 还挺 ep


main 就是一个名称而已

#2


但是 main 函数类型是编译器预先定义好的

只能用第三种方案,再增加一个入口main 函数

int main()
{
name::main();

return 0;
}

#3


引用 1 楼 fox000002 的回复:
lz 还挺 ep


main 就是一个名称而已


啥意思?  不明白

#4


引用 2 楼 fox000002 的回复:
但是 main 函数类型是编译器预先定义好的

只能用第三种方案,再增加一个入口main 函数

C/C++ code
int main()
{
    name::main();
    
    return 0;
}


额  这个方法我也想到了,感觉看着有点不自然

#5



真ep!!

#include <iostream.h>

namespace name
{
class Test
{
public:
Test()
{
}
~Test()
{

void Run()
{
cout<<"run";
}

friend int main();
};
};

int main()
{
name::Test *pT = new name::Test;
pT->Run();
delete pT;


return 0;
}


#6


引用 5 楼 jake443403168 的回复:
真ep!!
C/C++ code

#include <iostream.h>

namespace name
{
    class Test
    {
    public:
        Test()
        {
        }
        ~Test()
        {
        } 
        void Run()
        {
      ……


晕。。。  定义成 public 当然是可以了

#7


这样的代码在codeblocks下自带的gcc编译运行成功,而在cygwin下编译成功,但运行时栈出错.
include <iostream>

namespace name
{
extern "C" int main()    ;
class Test
{
    friend int main();
private:
    Test()
    {
        std::cout<<"run"<<std::endl;
    }
    ~Test()
    {
    }

};

extern "C" int main()
{
    name::Test t;

    return 0;
}

#8


上面尾部少一大括号.
把main函数也放入命名空间.

此等做法,没啥大意思.

#9


引用 8 楼 ljljlj 的回复:
上面尾部少一大括号.
把main函数也放入命名空间.

此等做法,没啥大意思.


visual studio 2008 下编译失败,gcc (MinGW) 下编译失败