c++ - 以下代码段出了什么问题?

我知道这是相当基本的违规行为,但这是什么?

class xyz
{
    void function1()
    {
        cout<<"in class";
    }
};

int main()
{
    xyz s1 = new xyz(100);
    xyz s2 = s1;
    s2.function1();
    delete s1;
    return 0;
}

使用new进行内存分配时出了点问题。我相信,但我似乎无法理解其背后的基本原理和解决方案。

最佳答案

new返回指向对象(而非对象)的指针(xyz *),因此您应更正s1的类型:

xyz* s1=new xyz(100);

并通过指针调用该方法,您应该使用运算符->:
s1->function1();

这等效于取消引用指针并在对象上调用方法:
(*s1).function1();

https://stackoverflow.com/questions/39934945/

相关文章:

java - “Cannot find symbol class keyboard reader”

c++ - 为什么 “std::isdigit”在Windows上的C++中报告 “no match

c++ - 编译器在声明类时显示未定义的结构错误

java - 为什么此代码段显示编译错误?

swift - 类型 'Category'(aka 'OpaquePointer')的值没有成员 '

c# - 无法将类型int隐式转换为int数组

c++ - 编译器错误: not declared in the scope

ruby-on-rails-3 - 在命名空间模型上使用 factory_girl_rails 和

java - 我的method.add(int)不会将用户输入添加到我的数组中

c# - 为什么编译器认为Environment.Exit可以返回?