【问题标题】:class member function resulting in error "non-class type"类成员函数导致错误“非类类型”
【发布时间】:2016-11-15 18:48:20
【问题描述】:

我想要一个简单的示例类(一个盒子),它有一个矢量数据成员来存储盒子的尺寸。我试图对类进行编码,以便可以将向量作为实例化的参数传递给它。该类有一个简单的成员函数,旨在提供维度向量的打印输出。当我尝试编译时,我收到一个关于请求成员函数的错误,说该函数是“非类类型”。我应该如何处理这个错误?

#include <iostream>
#include <vector>

using std::cout;
using std::endl;

class Box{
    public:
        Box(
            std::vector<double> dimensions
        );
        void display_dimensions();
    private:
        std::vector<double> m_dimensions;
};

Box::Box(
    std::vector<double> dimensions
    ):
    m_dimensions(dimensions){
    }

void Box::display_dimensions(){
    for(unsigned int i = 0; i < m_dimensions.size(); i++){
        std::cout
            << "element[" << i << "] = " << m_dimensions[i]
            << std::endl;
    }
    std::cout << std::endl;
}

int main(){
    // Create an instance of a box and set its dimensions vector data member.
    Box box_A(
        std::vector<double> dimensions = {78.0, 24.0, 18.0} // dimensions
    );
    // Get the box instance to display its dimensions.
    cout << "dimensions of box_A:" << endl;
    box_A.display_dimensions()
}

【问题讨论】:

  • 你声明box_A的方式,它是一个函数的声明,它返回Box,并以std::vector&lt;double&gt;为参数,默认值为{78.0, 24.0, 18.0}。所以 - 不是一个类实例。您可以在示例中看到实例化类实例的正确方法:here

标签: c++ class vector member-functions


【解决方案1】:

这不是你调用带有参数的构造函数的方式:

Box box_A(
    std::vector<double> dimensions = {78.0, 24.0, 18.0}
);

你不能用变量声明调用构造函数(或任何函数),你必须在调用之前移动它并传递变量:

std::vector<double> dimensions = {78.0, 24.0, 18.0};
Box box_A(dimensions);

或者,您可以创建一个临时变量,使用列表初始化器让编译器推断类型:

Box box_A({78.0, 24.0, 18.0});

【讨论】:

  • 啊哈!感谢那。看来我在用 Python 思考。接下来我将尝试在 C++ 中使用关键字参数...
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 2018-01-13
  • 1970-01-01
  • 2010-10-27
  • 2012-07-23
  • 1970-01-01
相关资源
最近更新 更多