2017-01-21 1 views
1

이 질문이 이미 제기되었지만 내가 본 다른 대답이 나에게 혼란 스럽다면 진심으로 사과드립니다. 다른 유형의 객체의 2D 행렬을 작성하는 데 사용하려는 클래스가 있습니다. 새로운 객체를 생성하는 메소드를 작성하려고하고 있는데, 2D 벡터의 포인터를 새 객체에 할당하려고합니다.하지만 구문을 올바르게 가져올 수없는 것 같습니다.(C++) 동일한 객체 유형에 대한 포인터의 2D 벡터에 새 객체를 인스턴스화하고 지정하는 구문은 무엇입니까?

std::vector<std::vector<CSinusoid*>> *m_SineMatrix; //2D Vector of pointers to CSinusoid objects 

을 그리고 나는이 라인을 따라하는 방법을 만들려고 :

나는이 같은 2D 벡터를 만들 난 곳

void CWaveMatrix::Init_SineMatrix(int x, int y) 
{ 
    m_SineMatrix[x][y] = new CSinusoid(); 
} 

함수 내부의 코드 줄은 문제가있다. 나는 새로운 객체를 가리 키도록 2D 벡터의 특정 포인터를 어떻게 말하는지 모른다.

벡터와 메서드 모두 동일한 클래스의 전용 멤버입니다.

답변

1

기능 내의 코드 줄은 내가 곤란한 부분입니다. 나는 새로운 객체를 가리 키도록 2D 벡터의 특정 포인터를 어떻게 말하는지 모른다.

코드에서 이미이를 수행합니다. new 연산자는 새 객체를 만들고 즉시 벡터를 가리 킵니다.

포인터의 벡터가있는 이유는 무엇입니까? 벡터는 이미 힙에 할당되어 있으므로 일반 객체를 벡터에 넣고 그렇게 액세스 할 수 있습니다. 미래의 문제로 이어질 가능성이 적습니다.

+0

죄송합니다, 내가 몇 가지 중요한 정보를 놓칠 것 같다

다음은 작동하는 솔루션이다. Visual Studio에서 문제의 코드 줄 안의 '='기호는 빨간색 밑줄이 그어져 있습니다.빨간색 선 위로 마우스를 가져 가면 "no operator"= "이 피연산자와 일치합니다"라는 메시지가 표시됩니다. 일반적으로 빨간색으로 밑줄 친 것은 무언가가 올바르지 않다는 것을 의미합니다. 제 문법에 아무런 문제가 없다고 확신합니까? 내가 방금 말한 것을 모르기 때문에 나는 포인터의 벡터를 가지고 있습니다. 잘 했어! – fmwavesrgr8

+0

아, m_SineMatrix 자체가 포인터라는 것을 알지 못했습니다! '(* m_SineMatrix) [i] [j] = 새로운 CSinusoid()'를 시도해야합니다. – PrestonH

2

나는 당신의 문제가 실제로 여기에 생각 :

std::vector<std::vector<CSinusoid*>> *m_SineMatrix 

m_SineMatrix이 CSinusoid 포인터의 2 차원 벡터 아니지만 ...이 같은 벡터에 대한 포인터입니다. 그리고 C++ [] 연산자는 벡터뿐만 아니라 원시 포인터에서도 작동합니다. 따라서 함수의 코드는 포인터의 [x] 연산자를 호출하고 결과를 2D 벡터로 처리 한 다음 2D 벡터에서 [y] 연산자를 호출하고 결과를 1D 벡터로 처리합니다. CSinusoid *를 CSinusoid *에 할당하는 방법을 알지 못하므로 불평합니다.

이 문제를 해결하려면 * m_SineMatrix를 m_SineMatrix로 변경하거나 함수를 * (m_SineMatrix) [x] [y]로 변경하십시오.

0

편집을 할

좋아 - 내가이 함께했던 진짜 문제는 내가 부당 실제로는 벡터의 벡터 때 2D 벡터로 문자 그대로, 객체 형의 격자되는 vizualized 것입니다 밝혀 개체. 이 경우 'vectorName [0] [0] ='객체에 직접 액세스하고 'vectorName [0] ='객체의 벡터를 액세스하므로 기본적으로 내 코드가 'thisType = thatType'이 아니라 말하는 'thisType = thisType'. 그것은 bool이 float과 같거나 그런 것과 같다고 말하는 것과 같을 것입니다. 이것은 빨간색 밑줄이 그어진 '='부호를 설명합니다.

std::vector<CSinusoid> vTemp; //Create a vector of object<type> 
CSinusoid Sine; //Create an object of same type 

for (int i = 0; i < x; i++) 
{ 
    vTemp.push_back(Sine); //Add copies of the object to new vector //A vector of vectors of objects 
std::vector<std::vector<CSinusoid>> m_SineMatrix; 
} 

for (int i = 0; i < y; i++) 
{ 
    m_SineMatrix.push_back(vTemp); //Add copies of that vector to 2D member vector of objects 
} 
관련 문제