Форум программистов, компьютерный форум CyberForum.ru

Помогите с ошибкой. Ассемблерные блоки - C++

Войти
Регистрация
Восстановить пароль
 
ga-mb-it
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 4
14.09.2011, 19:51     Помогите с ошибкой. Ассемблерные блоки #1
Помогите пожалуйста разобраться с ошибкой

Есть header файл с описанием объекта, привожу часть кода
class CBrain {
public:
CBrain( void );
virtual ~CBrain( void );
void SetMemDepth( UINT nMem1, UINT nMem2, UINT nMem3 );
........................................
protected:
........................................
UINT nMemDepth1; // Глубина памяти Mem1 нейрона.
UINT nMemDepth2; // Глубина памяти Mem2 нейрона.
UINT nMemDepth3; // Глубина памяти Mem3 нейрона.

UINT nMemMask1; // Маска памяти Mem1 нейрона.
UINT nMemMask2; // Маска памяти Mem2 нейрона.
UINT nMemMask3; // Маска памяти Mem3 нейрона.
};


И срр файл с описанием методов вышеописанного обекта

void CBrain::SetMemDepth( UINT nMem1, UINT nMem2, UINT nMem3 ) {
__asm {
// Блок обработки данных для Mem1.
mov ebx, this
bsr ecx, nMem1
add ecx, 2
and ecx, 0xfe
mov [ebx].nMemDepth1, ecx
mov [ebx].nMemMask1, ecx

mov eax, 0xffffffff
shl eax, cl
not eax

mov dword ptr [ebx].nMemMask1, eax
........................................
}
}


В строке выделенным красным цветом компилятор сообщает об ошибке:
(60) : error C2410: 'nMemMask1' : ambiguous member name in 'first operand'
Никак не могу понять в чем там проблема ведь в переменную nMemDepth1 все благополучно сохраняется а в nMemMask1 не могу сохранить результат и описаны обе эти переменные одинаково.

П.С. Когда строку с ошибкой комментирую то проект благополучно компилируется без ошибок, а с этой строкой ни как

Добавлено через 21 минуту
Какая то чудесия получается, если я переменную nMemMask1 переименовываю например в nMemMask1A или nMemMask, то все компилируется без ошибок значит проблема в имени. Если кто знает отпишитесь пожалуйста, почему так получается?

Добавлено через 20 минут
Все нашел ошибку у меня была объявлена статическая переменная в другом объекте с тем же именем, может кому пригодится в данной ситуации обращение на ассемблере к переменным объекта надо было строить с указанием имени объекта

Вот правильный вариант СРР файла описанного выше
void CBrain::SetMemDepth( UINT nMem1, UINT nMem2, UINT nMem3 ) {
__asm {
mov ebx, this

// Блок обработки данных для Mem1.
bsr ecx, nMem1
add ecx, 2
and ecx, 0xfe

mov dword ptr [ebx]this.nMemDepth1, ecx

mov eax, 0xffffffff
shl eax, cl
not eax

mov dword ptr [ebx]this.nMemMask1, eax
................................................
}
}


Извините что запачкал форум темой в которой задал вопрос и сам на него ответил, надеюсь что может кому эта информация поможет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2011, 19:51     Помогите с ошибкой. Ассемблерные блоки
Посмотрите здесь:

C++ Linux Помогите разобраться с ошибкой компановки g++
Помогите с ошибкой при подключении модуля C++
Visual C++ Ассемблерные вставки
Помогите с ошибкой C++ Builder
Помогите разобраться ошибкой Convert C++ Builder
помогите разобраться с ошибкой в вызове функции C++
C++ Помогите с ошибкой.
C++ Помогите с ошибкой Access violation reading location 0x1ed1d9f8.
C++ Ассемблерные вставки
C++ Ассемблерные вставки в C++
C++ Ассемблерные вставки пример
Разбить строку на блоки, а затем эти блоки на отдельные слова C++ Builder

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru