错误:类型“ struct a”不提供呼叫操作员

时间:2019-10-17 23:03:08

标签: c++

我正在编写以下代码,并创建结构CPuTimeState的对象:

struct CpuTimeState
  {
    ///< Field for time spent in user mode
    int64_t CS_USER = {};
    ///< Field for time spent in user mode with low priority ("nice")
    int64_t CPU_TIME_STATES_NUM = 10;

    std::string cpu_label;

    auto sum() const {
      return CS_USER + CS_NICE + CS_SYSTEM + CS_IDLE + CS_IOWAIT + CS_IRQ + CS_SOFTIRQ + CS_STEAL;
    }
  } cpu_info_obj;  // struct CpuTimeState

我声明了一个结构对象的向量,例如:

std::vector<CpuTimeState> m_entries;

我想在这样的函数中调用它:

  {
    std::string line;
    const std::string cpu_string("cpu");
    const std::size_t cpu_string_len = cpu_string.size();
    while (std::getline(proc_stat_file, line)) {
      // cpu stats line found
      if (!line.compare(0, cpu_string_len, cpu_string)) {
        std::istringstream ss(line);

        // store entry
        m_entries.emplace_back(cpu_info_obj());
        cpu_info_obj &entry = m_entries.back();

        // read cpu label
        ss >> entry.cpu_label;

        // count the number of cpu cores
        if (entry.cpu_label.size() > cpu_string_len) {
          ++m_cpu_cores;
        }

        // read times
        //for (uint8_t i = 0U; i < CpuTimeState::CPU_TIME_STATES_NUM; ++i) {
          ss >> entry

        }
      }
    }

在编译时抛出此错误:Type 'struct CpuTimeState没有提供调用运算符。

1 个答案:

答案 0 :(得分:0)

在线

m_entries.emplace_back(cpu_info_obj());

cpu_info_obj是变量,而不是类型。您试图在未实现该运算符的变量上调用operator()。那就是编译器所抱怨的。

要构造您的结构的新实例,您需要改为调用该结构的构造函数:

m_entries.emplace_back(CpuTimeState());

但是,通过传入一个参数,您是在告诉emplace_back()调用该结构的copy构造函数。更好的选择是完全忽略该参数,然后让emplace_back()为您调用该结构的默认构造函数:

m_entries.emplace_back();