pananning 发表于 2024-1-12 16:24

求助这个写法为什么不对

#include<iostream>
using namespace std;

class a
{
        friend int main();
private:
        int m;
};

int main()
{
        a p;
        cout << p.m << endl;
        system("pause");
        return 0;
}不是有默认构造函数吗,为什么编译运行报错,p没有初始化

如果再创建一个函数,把p作为参数传进函数,在函数里执行cout << p.m << endl;却不保错,这是为什么

~零度 发表于 2024-1-12 17:35

你的代码从语法上来说没问题,但是Visual Studio对代码检查比较严格,所以在编译时会更严格一些,用其他的编译器没有问题,有两种解决办法:

第一种:显式地定义出构造函数
#include<iostream>
using namespace std;

class a
{
    friend int main();
public:
    a() {};
private:
    int m;
};

int main()
{
    a p;
    cout << p.m << endl;
    system("pause");
    return 0;
}

第二种:禁用Visual Studio的SDL检查,步骤:“项目”→“属性”→“C/C++”→“常规”->"SDL检查",设置为“否”,然后点确定,重新生成解决方案就可以了

天下客 发表于 2024-1-12 17:36

感觉是编译器的问题

RulesConcepo 发表于 2024-1-12 18:03

没问题,换个编译器

pananning 发表于 2024-1-12 18:59

~零度 发表于 2024-1-12 17:35
你的代码从语法上来说没问题,但是Visual Studio对代码检查比较严格,所以在编译时会更严格一些,用其他的 ...

感谢回答,确实显示定义构造函数可以了

Hamon 发表于 2024-1-12 19:22

我第一次见到 main 函数作为友元函数的,可以提供一个返回变量的函数

Gerburious 发表于 2024-1-12 20:45

看起来没什么问题 换个编译器试试呢

iaoedsz2018 发表于 2024-1-13 01:19

~零度 发表于 2024-1-12 17:35
你的代码从语法上来说没问题,但是Visual Studio对代码检查比较严格,所以在编译时会更严格一些,用其他的 ...

真大佬!

pananning 发表于 2024-1-13 01:37

Hamon 发表于 2024-1-12 19:22
我第一次见到 main 函数作为友元函数的,可以提供一个返回变量的函数

只是为了测试

LXGZJ237 发表于 2024-1-13 02:39

a类的m没有初始化吧,不过问题不大
页: [1]
查看完整版本: 求助这个写法为什么不对