从文件读取并存储到对象数组"Expression not assignable" C++
read from file and store into object array "Expression not assignable" c++
我正试图从一个文件中读取3个值,看起来像这个例子:
ADJ09WAD 303 609.
tempString
和tempInt
是函数中的局部变量。
void read_inventory(item items[], int size) {
ifstream inStream;
inStream.open("inventory.txt");
int ct = 0; // counter
int tempInt;
string tempString;
if (!inStream.is_open()) {
cout << "Error, file did not open" << endl;
exit(1);
}
while (!inStream.eof()) {
getline(inStream, tempString, ' ');
items[ct].getid() = tempString; // accessor to private variables, this one
// is type string and I get no error.
getline(inStream, tempString, ' ');
tempInt = atoi(tempString.c_str()); // changing from string to int
items[ct].getqs() = tempInt; // I get error "Expression not assignable"
getline(inStream, tempString, 'n');
tempInt = atoi(tempString.c_str());
items[ct].getqr() = tempString; // same error
if (ct < size) {
ct++;
}
}
inStream.close();
};
item
类声明为
class item {
private:
string id;
int qs; // quantity sold
int qr; // quantity remaining
public:
item();
string getid() const;
int getqs() const;
int getqr() const;
void Print(item I);
};
items[ct].getqs() = tempInt;//我得到错误"Expression not assignable"
是的,当然,让我们看看你的getter:
int getqs() const;
这意味着,你试图将值赋给一个"int"返回值。这在c++中是行不通的。您可能应该做的是为它添加一个mutator方法,如下所示:
void setqs(int qs);
完成后,您可以按如下方式修复代码:
..
string getid() const;
void setid(const string& id_in) { id = id_in; }
int getqs() const;
void setqs(int qs_in) { qs = qs_in; }
int getqr() const;
void setqr(int qr_in) { qr = qr_in; }
...
items[ct].setqs(tempInt);
请注意,您需要对其余部分进行类似的操作,因此您的更改总体上看起来像这样:
getline(inStream, tempString, ' ');
items[ct].setid(tempString);
getline(inStream, tempString, ' ');
items[ct].setqs(atoi(tempString.c_str()));
getline(inStream, tempString);
items[ct].setqr(atoi(tempString.c_str()));
请注意,我删除了第三行的显式行尾'n'分隔符,因为这是默认的。
话虽如此,您应该使用std::strtoi
函数而不是c++ 11上的atoi。
在以下几行:
items[ct].getqs() = tempInt;
...
items[ct].getqr() = tempString;
左号不是可赋值表达式。函数本身通过复制返回;没有什么要分配的。它们可能会返回对item::qs
和item::qr respectively. That said to do that gives direct access to
item的私有成员的引用,这就避免了私有成员的目的。最好使用单独的get/set成员函数——这有很多优点——setter函数可以进行范围检查,并为访问数据提供断点位置——当您提供对对象私有成员的引用时,您将失去这种控制。
: items[ct].getid() = tempString;
的语义也是可疑的;我怀疑它是否在做你想做的事,即使它在语法上是有效的。如果没有修改对象items[ct]
,它将修改一个您没有引用的临时对象
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- C++ "error: invalid use of void expression"
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 如何修复 eigen3 中的'non-type template argument is not a constant expression'?
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- 为什么"an inherited constructor is not a candidate for initialization from an expression of the same or
- 为什么我"error: expression is not assignable"组合增量运算符
- 为什么我会收到"Expression is not assignable"错误?
- constexpr with std::array - "Non-type template argument is not a constant expression"
- 从文件读取并存储到对象数组"Expression not assignable" C++