1

2 次元ベクトルの使用に問題があります。double ベクトルをヘッダー ファイルで extern として宣言し、main() 呼び出しの直前に main.cpp ファイルで再び (extern としてではなく) 宣言しました。double ベクトルにメモリを動的に割り当てる関数を呼び出します。指定されたコードでは、コンパイル エラーは発生しません。ただし、実行時にベクトルにアクセスすると、Vector 添字が範囲外の例外になります。デバッガーを使用して確認したところ、ベクトルが関数内のメモリに割り当てられていることがわかりましたが、(関数スコープの外に) 戻るとすぐにベクトル サイズが 0 に戻ります。コードを添付しました。

color.h:

#ifndef __COLOR__
#define __COLOR__

class color{
        public :
        int r,g,b;

        color(void);
        color(int R, int G,int B);
    };
#endif

color.cpp

#include"color.h"
#include <iostream>

color::color(void){
    r=g=b=0;
}
color::color(int R, int G,int B){
    if(R<=1 && G<=1 && B<=1){
    r=R;g=G;b=B;
    }
    else{
    std::cout<<"Error in RGB values";
    }
}

header.h:

#ifndef __HEADER__
#define __HEADER__

    #include <iostream>
    #include <vector>

    #include "color.h"

    const int windowWidth=200;
    const int windowHeight=200;

    void function();

    extern std::vector <std::vector<color> > buffer;

#endif __HEADER__

color.cpp

#ifndef __COLOR__
#define __COLOR__

class color{
        public :
        int r,g,b;

        color(void);
        color(int R, int G,int B);
    };
#endif

main.cpp

#include "header.h"
std::vector <std::vector<color> > buffer;
void main(void){
    //myClass obj=myClass(1,4);

    function(/*obj*/);
    std::cout<<"HI";
            std::cout<<"vector : "<<buffer[0][0].r;  //VECTOR SUBSCRIPT OUT OF RANGE
    getchar();
}
void function(){
    std::vector <std::vector<color> > buffer (2*windowHeight, std::vector<color>(2*windowWidth));
    std::cout<<"HI";
}
4

1 に答える 1