2016-06-06 2 views
0

Я пытаюсь создать функцию, которая получает указатель MFnMesh и делает что-то на нем.Создайте указатель на MFnMesh

Проблема заключается в том, что я не может преобразовать мой MFnMesh к указателю, я думаю, что проблема не только в этом классе, но на MFnBaseClass, потому что я получаю эту ошибку.

/usr/autodesk/maya2015-x64/include/maya/MFnBase.h:168:14: error: ‘MFnMesh* MFnMesh::operator&() const’ is private 
    MFnClass * operator&() const 
      ^
/usr/autodesk/maya2015-x64/include/maya/MFnDagNode.h:237:2: note: in expansion of macro ‘declareMinimalMFn’ 
    declareMinimalMFn(MFnClass);   \ 
^
/usr/autodesk/maya2015-x64/include/maya/MFnMesh.h:243:2: note: in expansion of macro ‘declareDagMFn’ 
    declareDagMFn(MFnMesh, MFnDagNode); 
^
/home/k.masson/Documents/maya/km_extendedColorSet/src/km_particlesToColorSet.cpp:159:9: error: within this context 
    test(&meshFn); 
     ^

Вот тест функция, которая находится в somefile.h и включены в файл, который вызова функции.

void test(MFnMesh * meshFn){ 
    MStatus status = MS::kSuccess; 
    MString csName("YOLOSWAQDAZD"); 
    status = meshFn->createColorSetDataMesh(csName); 
    MCheckStatus(status,"Error creating new color set"); 
} 

А вот то, что я делаю перед вызовом функции test.

// Get the out mesh data 
     MDataHandle outMeshHandle = data.outputValue(aOutGeometry, &status); 
     MCheckStatus(status,"ERROR getting aOutGeometry"); 

     // Copy the in mesh to the output 
     outMeshHandle.copy(inMeshData); 

     // Create a function set for the out mesh 
     MFnMesh meshFn(outMeshHandle.asMesh()); 
     test(&meshFn); 

я не нашел какой-либо способ, чтобы преобразовать мой MFnMesh к указателю, так что я пытался напрямую назвать его как объект, а не указатель, как это.

test(meshFn); 

void test(MFnMesh meshFn){ 
    MStatus status = MS::kSuccess; 
    MString csName("YOLOSWAQDAZD"); 
    status = meshFn.createColorSetDataMesh(csName); 
    MCheckStatus(status,"Error creating new color set"); 
} 

И я получаю это:

/usr/autodesk/maya2015-x64/include/maya/MFnMesh.h:243:16: error: ‘MFnMesh::MFnMesh(const MFnMesh&)’ is private 
    declareDagMFn(MFnMesh, MFnDagNode); 
       ^
/usr/autodesk/maya2015-x64/include/maya/MFnBase.h:166:9: note: in definition of macro ‘declareMinimalMFn’ 
     MFnClass(const MFnClass &rhs);       \ 
     ^
/usr/autodesk/maya2015-x64/include/maya/MFnMesh.h:243:2: note: in expansion of macro ‘declareDagMFn’ 
    declareDagMFn(MFnMesh, MFnDagNode); 
^
/home/k.masson/Documents/maya/km_extendedColorSet/src/km_particlesToColorSet.cpp:159:14: error: within this context 
    test(meshFn); 
      ^
In file included from /home/k.masson/Documents/maya/km_extendedColorSet/src/km_particlesToColorSet.cpp:29:0: 
/home/k.masson/Documents/maya/km_extendedColorSet/src/kmColorSetTool.h:29:6: error: initializing argument 1 of ‘void test(MFnMesh)’ 
void test(MFnMesh meshFn){ 

Так что вы знаете, если есть в любом случае создать функцию, которая действует на MFnBase класса в моде, как, или даже класс с MFnBase атрибут? Я не знаю, что мы не можем делать такой процесс, который действительно является текущим.

Я новичок в C++, поэтому возможно, что я совершил туманную ошибку.

+0

Хорошо, я нашел решение, но я не знаю, что это значит, я изменил подпись к 'MFnMesh & mesh' и работает –

ответ

0

MFnBaseClass не позволяет использовать преобразование в указатель, а вместо использовать ссылку, которая работает почти одинаково. См. References vs. Pointers для получения дополнительной информации.

правильная подпись для моей функции

void test(MFnMesh& meshFn) 

И способ использовать это

test(meshFn); 

И использовать ссылку на функцию, просто использовать его как обычный объект

void test(MFnMesh& meshFn){ 
    MStatus status = MS::kSuccess; 
    MString csName("YOLOSWAQDAZD"); 
    status = meshFn.createColorSetDataMesh(csName); 
    MCheckStatus(status,"Error creating new color set"); 
}