【发布时间】:2022-12-18 21:34:36
【问题描述】:
我正在开发一个加密货币交换模拟器,它从 CSV 文件中读取数据并将它们转换为对象。我有一个名为 orderBook 的课程,它负责阅读。该类的功能之一是 getKnownProducts,它将所有货币打印为字符串。
我想从主 cpp 文件中的另一个函数调用函数 getKnownProducts 以列出所有产品。
class OrderBook
{
public:
/** Construct, reading a csv file*/
OrderBook(std::string filename);
/** Return vector of all known products in the dataset*/
std::vector<std::string> getKnownProducts();
//some more code...
};
我在主文件中创建了一个实例。 (构造函数确实读取了 CSV 文件,但省略了代码,因为它不相关)
OrderBook orderBook{"20200601.csv"};
这是cpp文件中的实现。
std::vector<std::string> OrderBook::getKnownProducts()
{
std::vector<std::string> products;
std::map< std::string, bool> prodMap;
//OrderBookEntry is a class that has a constructor with the data types required to store the data from the csv file.
for(OrderBookEntry& e : orders)
{
prodMap[e.product] = true;
}
// Flatten map to a vector of strings
for(const auto& productStringBoolPair : prodMap)
{
products.push_back(productStringBoolPair.first);
}
return products;
}
最后,当我收到类型名称错误时,我尝试从以下函数调用 getKnownProducts。 vs code 假设我正在使用类调用函数,但我正在使用类的实例来调用函数。我应该怎么做才能说清楚?
void printProducts()
{
for(std::string const& p : orderBook.getKnownProducts())
{
std::cout << "products: " << p << std::endl;
}
}
【问题讨论】:
-
你希望它做什么?在没有类实例的情况下调用非静态方法应该意味着什么?您期望成员变量(例如
orders)的值神奇地来自哪里? -
您需要一个对象来调用成员函数。
OrderBook{"foo"}.getKnownProducts()在语法上是正确的,但你想做什么不清楚 -
这是你的问题:
OrderBook OrderBook{"20200601.csv"};。不要给变量起与给类相同的名称。在OrderBook ob("xxx");周围做某事,然后在for (const auto& p : ob.getKnownProducts())VTC 打字错误。