2014-01-28 8 views
0

Ok .ppm 이미지 파일을 수정하는 코드를 작성하고 있습니다. pic은 읽어 들여지고 PPM 클래스 객체에 저장됩니다. 각 픽셀은 RGB 구조체에 저장됩니다. 결국 원본 이미지의 모든 색상이 작은 색상 팔레트의 색상으로 변환됩니다. 이것은 내가 만든 거리 함수를 사용하여 하나의 색상이 다른 색상과 얼마나 가까운지 계산합니다. 색상 팔레트를 반복하여지도에 삽입합니다. 키는 이미지의 현재 픽셀과의 거리입니다. 어쨌든 ive는 구문을지도에 삽입하여 구문을 엉망으로 만듭니다. 어떤 도움이 필요합니까? 멤버 함수 '무효 PPM :: process1()에서 : 에 support.cpp : 144 : 78 : 오류 : 매칭 함수 아래맞춤형 개체가있는지도를 사용하는 중에 오류가 발생 했습니까? 아마도 구문 문제

에 support.cpp 뱉어되지 않는 거 에러의 일부 '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(); 
}; 

답변

1

템플릿 매개 변수 목록 구문이 잘못되었습니다. 유형 이름 다음에 괄호를 생략하면 정상이어야합니다.

map<float, RGB> distanceTest; //no() 
+0

고마워, 나는 여전히 기본을 배우고있다. 이 같은 작은 것들이 때때로 나를 여행한다. –