0

Imageクラスは、BMPクラスのサブクラスです。このメソッドで画像を操作するために、BMPクラスのいくつかのメソッドTellHeight()、TellWidth()などを使用しようとしています。ただし、BMPを作成してその関数を呼び出そうとすると、コンパイル時に次のようなエラーが発生します。

未定義の記号:

BMP :: BMP()、参照元:
Image :: invertcolors()

これはメソッドinvertcolors()です:

void Image::invertcolors()
{
BMP img_invert;
img_invert.ReadFromFile("inverted.bmp");
//int height =img_invert.TellHeight();
//int width = img_invert.TellWidth();

//for(int i = 0; i<height; i++)
//{
//for(int j =0; j<width; j++)
//{
//RGBApixel* current = img_invert(j,i);
//current->Blue = 255 - (current->Blue);
//current->Green = 255 - (current->Green);
//current->Red = 255 - (current->Red);
//current->Alpha = 255 - (current->Alpha);
//}
//}
}
4

4 に答える 4

2

未定義のシンボルはリンク時のエラーです。バイナリをリンクするときは、その関数を定義するコンパイル済みコードとリンクする必要があります。

BMP が外部ライブラリの一部である場合、次のようなものをリンク行に追加する必要があります。

 -L/path/to/lib -lbmp
于 2010-02-02T01:06:33.570 に答える
1

BMP には引数のないコンストラクターがありません。別の手段を使用して、使用する BMP のインスタンスを取得する必要があります。

于 2010-02-02T00:59:39.277 に答える
1

BMP クラスにデフォルトのコンストラクターがありません。いずれかを実装するか、Image にその親のイニシャライザを適切に呼び出させます。例えば、

// this class does not have a default constructor:
class Parent 
{
public:
   Parent( int a ) { /* .. */ }
};


// so this one must call its parent's constructor with a parameter
class Child : public Parent
{
public:
   Child() : Parent(42) { /* .. */ } 
}
于 2010-02-02T01:00:03.977 に答える
0

リンカーエラーのように見えます。BMP ライブラリがリンクされていません

于 2010-02-02T01:04:36.987 に答える