Why am I getting the "Expression is not assignable" error?
30,455
In C++ int
is a primitive type, not a class, like in Java. If you return int
, you just return it as a constant, so
gL[i].get_sold(i) = something;
is not possible. You need to have proper getter and setter for your class:
int Item::get_sold() {
return sold;
}
void Item::set_sold(int s) {
sold= s;
}
//..
if(gL[i].get_sold() > gL[smallestPos].get_sold()) {
temp = gL[i].get_sold();
gL[i].set_sold(gL[smallestPos].get_sold());
gL[smallestPos].set_sold(temp);
}
also, consider to use std::vector
template and sort function:
http://www.cplusplus.com/reference/algorithm/sort/
#include <algorithm>
#include <vector>
// Create comparsion function (or simple overload an < operator):
bool compareSold(Item i1, Item i2) {
return i1.get_sold() < i2.get_sold();
}
// replace static array with std::vector<Item>
std::vector<Item> arrItems();
// You can init it with your static array, but better way would be
// to delete a static array and use this vector all the time.
arrItems.assign(gL, gL+ct);
// Sort it
std::sort (arrItems.begin(), arrItens.end(), compareSold);
// If you need to convert std::vector to [] array, you can use &arrItems.front()
Item* i = &arrItems[0];
Author by
Sam Perales
Computer Science major living with cat roommates, what more can you ask for.
Updated on July 09, 2022Comments
-
Sam Perales almost 2 years
I made a class with private name, units sold, and units remaining.
I made two class methods that return, units sold and units remaining as ints.
I want to sort the units sold from greatest to least, but I get errors as I explain in the comments.
What am I doing wrong, is it something very obvious?
#include <iostream> #include <string> #include <fstream> using namespace std; const int MAX_SIZE = 1000; const char FILE_NAME[14] = "inventory.txt"; //make an Item class class Item { private: string name; int sold, remain; public: void set_name(string _name); void set_sold(int _sold); int get_sold(int); void set_remain(int _remain); int get_remain(int); void print(); }; //I erased all the methods setting name, sold, and remaining, they work though int Item::get_sold(int s) { s = sold; return s; } int Item::get_remain(int r) { r = remain; return r; } //greatest to least units sold void sort_sold(Item gL[], int ct) // ct is a global constant set to 1000 { //local variables int smallestPos; int temp; //for every position in the array for(int i=0;i<ct;i++) { //find the smallest element starting at that point smallestPos = i; for(int j=i+1;j<ct;j++) { if(gL[j].get_sold(j) < gL[smallestPos].get_sold(smallestPos)) { //found a smaller one, remember and keep going smallestPos = j; } } //see if we found something smaller than gL[i].get_sold(i) if(gL[i].get_sold(i) > gL[smallestPos].get_sold(smallestPos)) { //we did find a smaller one, so swap with gL[i].get_sold(i) temp = gL[i].get_sold(i); gL[i].get_sold(i) = gL[smallestPos].get_sold(smallestPos); //not assignable? gL[smallestPos].get_sold(smallestPos) = temp; //not assignable? } } }