2014-08-31 3 views
1

Предполагая, что изображение является объектным файлом «a», я создал другой объектный файл с именем b, чтобы повернуть изображение. Я давал (j, i) из a (i, j) of b, но мой код не работает, потому что я неправильно использую эту функцию, называемую оператором, у меня есть «//» то, что я пытался, но я продолжал получать ошибку, что мне делать? rgbapixels - это класс пикселей, как и png - класс изображения;Как вы поворачиваете данное изображение?

в PNG.h теперь мы имеем функцию, определенную как;

#include <iostream> 
#include "rgbapixel.h" 
class PNG 
{ 
public: 
RGBAPixel * operator()(size_t x, size_t y); 
/** 
* Const pixel access operator. Const version of the previous 
* operator(). Does not allow the image to be changed via the 
* pointer. 
* @param x X-coordinate for the pixel pointer to be grabbed from. 
* @param y Y-cooridnate for the pixel pointer to be grabbed from. 
* @return A pointer to the pixel at the given coordinates (can't 
*  change the pixel through this pointer). 
*/ 
size_t width() const; // returns width 
size_t width() const; 
private: 
// storage 
size_t _width; 
size_t _height; 
RGBAPixel * _pixels; 
}; 

Функции были выполнены для нас в png.cpp. Итак, в main.cpp у меня есть код для их использования;

#include <algorithm> 
#include <iostream> 

#include "rgbapixel.h" 
#include "png.h" 
using namespace std; 
int main() 
{ 
cout << "me..........." << endl; 
PNG a("I have put the image in "a" here"); 
PNG b; 
for(size_t i = 0; i < a.width(); i++) 
{ 
for(size_t j = 0; j <a.height(); j++) 
{ 
// *b(i, j) = *a(j, i);        erata 
// b(i,j) = RGBAPixel * operator()(size_t x, size_t y); 
// b(i, j) = operator()(i, j);    
//b(i,j) = *operator(i,j); 
//b(j,i) = a*operator(i,j); 
//b(j,i) = a.operator(i,j); 
//b(j, i) = a.*operator(i,j); 
} 
} 
return 0; 
} 

Я получаю ошибки с использованием функции, я не могу сказать, что не так. Итак, я не знаю, будет ли мой алогарифм получить изображение повернутым

некоторые ошибки;

[[email protected] lab_intro]$ make 
clang++ -std=c++1y -stdlib=libc++ -c -g -O0 -Wall -Wextra -pedantic main.cpp 
main.cpp:24:29: error: expected ')' 
b(i,j) = *operator(i,j); 
        ^
main.cpp:24:28: note: to match this '(' 
b(i,j) = *operator(i,j); 
       ^
main.cpp:24:20: error: use of undeclared 'operator()' 
b(i,j) = *operator(i,j); 
     ^
2 errors generated. 
make: *** [main.o] Error 1 

Благодаря

ответ

0

Оператор () привыкает, когда экземпляр класса с этим оператором получает вызывается как вызов функции.

Так, с PNG класса, и два экземпляра него называется a и b, их оператор () бы получить просто ссылаться как:

a(i, j) 

или

b(i, j) 

С вашим () оператор возвращает a RGBAPixel *, конечным результатом такого вызова псевдофункции является указатель, который, я полагаю, должен быть разыменован.

Первая закомментирована строка кода в вашем примере:

// *b(i, j) = *a(j, i); 

Это выглядит для меня как правильного использования вашего оператора (). Я не вижу никаких проблем с компиляцией.

+0

Но это не удается, это дает мне ошибку; clang ++ -std = C++ 1y -stdlib = libC++ -c -g -O0 -Wall -Wextra -pedantic main.cpp main.cpp: 21: 62: ошибка: использование необъявленного идентификатора 'erata' * b (i , j) = * a (j, i); erata ^ 1 погрешность сгенерирована. make: *** [main.o] Ошибка 1 – user124627

+0

Ваше сообщение об ошибке четко ссылается на «erata», что бы это ни было. Сообщение об ошибке не имеет ничего общего с оператором присваивания. Полезный совет: всегда читайте сообщение об ошибке как минимум три раза, прежде чем сдаваться и просить кого-нибудь о помощи. Особенно сообщения об ошибках clang, которые имеют репутацию своей ясности и полезности. –

+0

Он работает, но по какой-то причине, когда я выводил изображение в «b», его пустое, и оно показывает, что пиксели не были скопированы. го предупреждений; ....... [EasyPNG]: предупреждение: попытался получить доступ к несуществующему пикселю (511, 383); Усечение запроса для установки в диапазоне [0,0] x [0,0]. [jonathan2 @ linux-a1 lab_intro] $ – user124627

0

Вы не должны вызывать функцию оператора в этом пути, вместо того, чтобы сделать это:

*b(i, j) = *a(j, i); 
+0

Но это терпит неудачу, это дает мне ошибку; clang ++ -std = C++ 1y -stdlib = libC++ -c -g -O0 -Wall -Wextra -pedantic main.cpp main.cpp: 21: 62: ошибка: использование необъявленного идентификатора 'erata' * b (i, j) = * a (j, i); Создана ошибка erata^1. make: *** [main.o] Ошибка 1 – user124627

+1

спасибо, ребята, я его оцениваю – user124627

Смежные вопросы