2015-10-25 3 views
0

У меня вопрос. Когда я скомпилировал библиотеку ImageMagicK в проекте формы C++ vs2010.неоднозначная ошибка в vC++ с ImageMagicK

У меня есть некоторые коды ошибок, подобные этому.

1> ex3.cpp (22): ошибка C2872: 'Изображение': неоднозначный символ

1> может быть «C: \ файлы программы \ ImageMagick-6.8.6-q16 \ Include \ Magick ++/Image .h (55): Magick :: Изображение '

1> or' c: \ program files \ reference assembly \ microsoft \ framework.netframework \ v4.0 \ system.drawing.dll: System :: Drawing :: изображение»

файл выглядит следующим образом:

// ex3.cpp : main project file. 

#include "stdafx.h" 
#include "Form1.h" 
#include <Magick++.h> 


using namespace ex3; 
using namespace Magick; 

[STAThreadAttribute] 
int main(array<System::String ^> ^args) 
{ 
    // Enabling Windows XP visual effects before any controls are created 
    Application::EnableVisualStyles(); 
    Application::SetCompatibleTextRenderingDefault(false); 
    // Create the main window and run it 
    Application::Run(gcnew Form1()); 


    InitializeMagick(*argv); 
    Image master; 
    master.read("C:₩₩abc.jpg"); 
    master.addNoise(ImpulseNoise); 
    master.write("C:₩₩abc_magic.jpg"); 
    return 0; 
} 
+0

Ссылка не работает. Почему бы не написать здесь код. 22 строки не могут быть слишком большими. –

+0

@ Бо Перссон: извините за это. У меня есть ссылка на ссылку. – nanana

ответ

0

Это пример того, когда using namespace xxx вызывает конфликт. На линии

Image master; 

компилятор не может сказать, если вы имеете в виду Magick::Image или .NET Image.

Вы можете выбрать тот, который вы, вероятно, нужно, будучи явным и написать

Magick::Image master; 

Это именно причина изобретая пространств имен, в первую очередь, и поэтому настоятельно не рекомендуется добавить using namespace xxx в файлы, просто чтобы сохранить некоторую типизацию.

Как говорит Виктор Торрес в своем ответе, неясно, работает ли ImageMagick с Managed C++, но это еще одна проблема.

+0

Спасибо, сэр. Я сразу же проверю – nanana

+0

Сэр. Я решил эту проблему с вашим ответом. Благодарю. КСТАТИ. У меня есть одна ошибка в этом InitializeMagick (* argv); сообщение об ошибке, в котором не указывается идентификатор «argv». В этом случае, что я должен делать для решения? – nanana

+0

Я не сэр, но «argv» может быть проблемой при использовании Managed C++. В исходном C++ основная функция выглядит как 'int main (int argc, char * argv []);', и есть 'argv' для перехода к инициализации. Как это сделать с помощью '^ args', я не знаю. –

0

После исследования на веб-зрения. vC++, похоже, не является выбором из программного пакета imagemagick. Не видел vC++ как интерфейс

Смежные вопросы