2010-08-10 12 views
3

double [][6]을 전달해야합니다. 그러나 나는 그 2 차원 배열을 만드는 방법을 모른다.C++ : 2 차원 배열 : 1 차원 고정?

6은 메서드에서 허용하는 고정 된 크기 (또는 내 용어가 올바른 경우 "리터럴 상수")입니다. 나는

double *data[6] = new double[6][myVariableSize]; 

그래서,이 방법은 정말 보이는 ... 이런 식으로 뭔가를 시도하지만 성공하지 못했습니다 같은 : 사전에

int myMethod(double obj_data[][6]); 

감사

+1

어떤 오류 메시지가 표시됩니까? –

답변

3

나는 차원이 질문에서 말할 수 있지만, 이것은 가치가 시도 될 수 있습니다

double (*data)[6] = new double[myVariableSize][6]; 
+0

죄송합니다, 난 그냥 monospaced 글꼴에 대한 당신의 몸에 오류를 넣어. –

+0

@Martijn Courteaux,'std :: bad_alloc'은 보통 메모리가 부족하거나 음수 길이의 배열을 할당하려고한다는 것을 의미합니다. 'myVariableSize'의 값은 무엇입니까? 초기화 되었습니까? – finnw

+0

주석에서 모노 스페이스 텍스트를 얻으려면 백틱 (')으로 둘러 쌉니다. – finnw

1

귀하의 방법 정의 (이 같아야합니다) 당신의 정의와 일치합니다 :

int myMethod(double obj_data[6][]); 

을 그 유효 C가 아니다 ..하지만 ++ 첫 번째 희미한 때문에 앙상블은 정의되지 않을 수 있습니다. 다음을 시도하십시오.

int myMethod(double **obj_data, const int numOfColumns, int numOfRows) 
{ 
    // Set the element in the last column/row to 5 
    obj_data[numOfRows-1][numOfColumns-1] = 5; 

    return 0; 
} 


int main(int argc, char* argv[]) 
{ 
    // Define array size 
    int myNumOfRows = 5; 
    const int numOfColumns = 6; 

    // Allocate memory 
    double** data = new double*[myNumOfRows]; 
    for (int i = 0; i < myNumOfRows; ++i) 
    { 
     data[i] = new double[numOfColumns]; 
    } 

    // Do something with the array 
    myMethod(data, numOfColumns, myNumOfRows); 

    return 0; 
} 
+0

어느 쪽이 올바른지는 명확하지 않지만, OP는 두 차원이 뒤섞여있는 것처럼 보입니다 – finnw

3

std::array<std::vector<double>, 6>을 사용할 수 있습니다.

typedef std::array<std::vector<double>, 6> my_array_t; 

int myMethod(const my_array_t& obj_data); 

컴파일러는 여전히 대신 boost::array을 사용할 수 std::array 지원하지 않는 경우.

+0

's/C++/C++ 0x/g' .... –

+0

C++ 0x를 의미합니까? –

+0

'boost :: array'는 C++에서 사용할 수 있습니다. 'std :: array'는 C++ 0x에서 왔지만, 많은 현대 컴파일러에서 이미 지원하고 있습니다. –

3

이 작동합니다 :

int myMethod(double obj_data[][6]) 
... 
int myVariableSize = 10; 
double (*data)[6] = new double[myVariableSize][6]; 
myMethod(data); 

첫 번째 차원은 변수가 될 수 있습니다 언급 한 바와 같이 !

+0

+1 : 이것은 작동합니다. 나는 원래 같은 일을 시도했지만 어떤 이유로 컴파일 할 수 없었다. –

0

제 동료와 당신이 제안한 문제의 유사 콘텐츠를 얻을 수 없습니다. 하지만이 작업을 수행하고 컴파일 않습니다

int myMethod(double** obj_data) 
{ 
    return 5; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    const int myVariableSize = 3; 
    double** b = new double*[3]; 
    for (int i = 0 ; i < 3;i++) 
    { 
     b[i] = new double[myVariableSize]; 
    } 

    myMethod(data); 

    return 0; 
} 

난 당신이 단지 2 차원 배열에 대한 이중 벡터를 사용하여 다시 이동하거나 부스트 (그래서 내가 말한거야) 다차원 배열의 일부를 사용 제안한다.