VC++2015报错:在没有适当operator()的情况下调用类类型

牛黄解闷丸
  • 61

VC2015环境,问题在代码里面,请看下面代码

//声明点结构
struct Point3D 
{
    GLfloat x, y, z;
    Point3D(GLfloat _x, GLfloat _y, GLfloat _z) : x(_x), y(_y), z(_z) {}
};

//在类里用,未初始化
class A
{
public:
    A();
    ~A();
    //在类里声明并初始化数组,允许,不报错
    GLfloat    BG_RGBA[4] = {0.22f,0.24f,0.27f,1.0f};
    
    //如果声明并初始化自定义类型,报错,怎么做这里才能向上面一样不报错?
    Point3D    LastPoint(0,0,0);
    
    void F(void);
}

A::F()
{
     //报错:在没有适当operator()的情况下调用类类型
     LastPoint(0,0,0)
     
     //感觉太烦锁,怎么样才能像上面一样写法?
     LastPoint.x = 0;
     LastPoint.y = 0;
     LastPoint.z = 0;
}
回复
阅读 1.8k
1 个回答
  • 上面的代码反应了似乎你的 C++ 基础不是很好,出现多处明显语法错误
  • 如果可以,建议直接学习 C++11 及后续版本

    #include <iostream>
    
    using namespace std;
    
    class Point3D
    {
    public:
      float x, y, z;
    
      Point3D(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
    
      void operator ()(int a, int b, int c)
      {
          cout << a << " " << b << " " << c << endl;
      }
    };
    
    class A
    {
    public:
      A() = default;
      ~A() = default;
    
      float    BG_RGBA[4] = {0.22f,0.24f,0.27f,1.0f};
    
      Point3D    LastPoint{0, 0, 0};             // 注意此处的初始化方式 C++11/14 新版本支持
      Point3D    LastPoint1 = Point3D(0, 1, 1);  // 经典 C++ 支持
    
      void F();
    };
    
    void A::F()
    {
       LastPoint(3,3,3);
    
       LastPoint.x = 0;
       LastPoint.y = 0;
       LastPoint.z = 0;
    }
    
    int main()
    {
      A a;
    
      a.F();
    
      return 0;
    }

    输出:

  • 3 3

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏