我正在编写以下代码,并创建结构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
没有提供调用运算符。
答案 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();