Хорошо, я пишу код для изменения файлов изображений .ppm. Картинка читается и сохраняется в объекте класса PPM. Каждый пиксель хранится в RGB-структуре. В конечном итоге он преобразует все цвета исходного изображения в цвета из небольшой цветовой палитры. Это делается с помощью созданной мной функции расстояния, которая вычисляет, насколько близко один цвет находится к другому. Он проходит по цветовой палитре и вставляет их в карту, ключом которой является расстояние от текущего пикселя на изображении. Каким-то образом я испортил синтаксис, вставив его в карту. Любая помощь?
Ниже приведена часть гигантской ошибки, которая выплевывается
support.cpp: В функции-члене ‘void PPM :: process1 ()’:
support.cpp: 144: 78: ошибка: отсутствует функция сопоставления для вызова ‘std :: pair :: pair (float, RGB&)»
Вот часть кода, из которой исходит ошибка. Это в том, как я использую функцию вставки. Я не могу заставить класс RGB соответствовать тому, что хочет компилятор, и не уверен, что я делаю неправильно.
Изменить: Обновить Я знаю, что, поскольку код в настоящее время он не будет работать. Я не смывал это. Мне нравится пытаться убрать ошибки синтаксиса рано.
void PPM::process1()
{
// for each pixel {
// find closest qcolor
// set pixel color to closest qcolor
// }
map<float, RGB()> distanceTest;
RGB RGBtemp;
map<float,RGB()>::iterator it;
for(int i = 0; i < img.size(); ++i){
for(int j = 0; j < qcolors.size(); ++j){
RGBtemp = qcolors[j];
distanceTest.insert(pair<float,RGB()>(img[i].distance(qcolors[j]), RGBtemp));
}
it = distanceTest.begin();
distanceTest.clear();
}
}
Ниже приведен весь код заголовка, который связан.
typedef unsigned char uchar;
typedef enum { run_process1, run_process2 } pmode_t;
struct RGB {
// constructor/destructor
RGB(uchar R=0, uchar G=0, uchar B=0);
// operator< overload
float distance(RGB);
uchar R, G, B;
};
class PPM {
public:
PPM();
~PPM();
void read(const string &);
void write(const string &);
void write(const string &, const string &);
void process(pmode_t, const string &);
private:
string magicid;
int nrows, ncols;
int maxvalue;
vector<RGB> img;
vector<RGB> qcolors;
void read_qcolors(const string &);
void process1();
void process2();
};
Ваш синтаксис для списка параметров шаблона неверен. Опустите скобки после имени вашего типа, и все будет в порядке:
map<float, RGB> distanceTest; //no ()
Других решений пока нет …