【发布时间】:2022-11-26 00:07:36
【问题描述】:
我是 C++ (c++11) 的初学者,我试图了解如何在构造函数中初始化数据,然后在内部方法中使用这些预先计算的信息。在 Python 中,我可以很容易地完成以下操作:
class SumClass:
def __init__(self, file_path):
self._file_lines = self.read_file(file_path)
def self.read_file(file_path):
# read file
pass
def calculate_sum(self):
calculated_sum = 0
for element in self._file_lines:
calculated_sum += element
return calculated_sum
sumClass = SumClass(file_path)
sum1 = sumClass.calculate_sum()
sum2 = sumClass.calculate_sum()
要点是,使用这段代码,我只读取一次文件,同时计算总和,并期望在 C++ 中也是如此。
那是我尝试过的,但是每当我运行代码时,sales_lines 的大小都是 0,所以它不起作用:(
//sum.hpp
class SumClass
{
public:
const std::vector<std::uint32_t> sales_lines;
SumClass::SumClass(std::string sales_path);
SumClass::size_t calculate_sum();
}
//sum.cpp
#include "sum.hpp"
class SumClass
{
static vector<std::string> read_file(std::string sales_path){
vector<std::uint32_t> file_lines;
// read file
return file_lines;
}
SumClass(std::string sales_path){
vector<std::uint32_t> sales_lines = read_file(sales_path);
}
size_t calculate_sum()
{
size_t calculated_sum = 0;
for (auto element in sales_lines) calculated_sum+= element;
return calculated_sum;
}
}
//main.cpp
#include "sum.hpp"
main(){
SumClass sum_obj(file_path);
auto sum1 = sum_obj.sum()
auto sum2 = sum_obj.sum()
auto sum3 = sum_obj.sum()
}
【问题讨论】:
-
这不编译。你的实际代码是什么?
-
如果您先从 Python 代码中删除
self,您认为会发生什么?你在 C++ 中做同样的事情。 -
SumClass构造函数中的vector<std::uint32_t> sales_lines = read_file(sales_path);行声明了一个局部变量sales_lines,它是一个完全独立于类成员变量SumClass::sales_lines的变量。 -
成员
sales_lines不应该是const。改为私有。此外,您的read_file()函数不会读取任何内容,留下评论不会神奇地进行读取:D(是的,您正在用本地成员向量隐藏您的成员向量)因此为什么每次都为零,范围-based for 循环不会迭代,因为向量为空,因此它返回先前初始化的零。如果那不是您的真实代码,请发布您的真实代码,否则它毫无意义,我们无法帮助您解决您没有展示的问题 :)