there are various serious problems with the way juce declares its namespace and some other things that it does that make it very difficult to compile with qt 4. I was making sure to include juce headers after the qt headers, and this was fine until I needed to add a precompiled header to my project, which is impossible until this is fixed.
Including juce.h before QMessageBox in a precompiled header breaks the legal QMessageBox::Button enum declaration:
c++ -x c++-header -c -pipe -g -dead_strip -Wall -W -F/usr/local/Trolltech/Qt-4.1.4/lib -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/include/QtCore -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtGui.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/include/QtGui -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/include -I../.. -I../../../libs/juce -I../../../libs/boost_1_33_1 -I../../src/gui/moc -I../../src/gui/ui ../pch/headers.h -o gui.gch/c++
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtGui.framework/Versions/4.0/Headers/qmessagebox.h:62: error: 'juce::Button' referred to as enum
../../../libs/juce/src/juce_appframework/audio/devices/../../gui/components/controls/../layout/../buttons/juce_Button.h:78: error: 'juce::Button' has a previous declaration here
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtGui.framework/Versions/4.0/Headers/qmessagebox.h:62: error: expected unqualified-id before '{' token
make: *** [gui.gch/c++] Error 1
Including juce.h before QList (and some others) breaks all kinds of stuff:
c++ -c -pipe -g -Wall -W -F/usr/local/Trolltech/Qt-4.1.4/lib -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/include/QtCore -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtGui.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/include/QtGui -I/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/include -I../libs/juce -I. -I. -o test.o test.cpp
In file included from /usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:28,
from /usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/QList:1,
from test.cpp:2:
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h:249:1: error: pasting "L" and "*" does not give a valid preprocessing token
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h:263:1: error: pasting "L" and "*" does not give a valid preprocessing token
In file included from /usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/QList:1,
from test.cpp:2:
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:324:1: error: pasting "L" and "*" does not give a valid preprocessing token
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:327:1: error: pasting "L" and "*" does not give a valid preprocessing token
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h: In function 'void qAtomicDetach(T*&)':
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h:249: error: 'L' was not declared in this scope
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h:249: error: expected type-specifier before ';' token
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h: In function 'void qAtomicDetach(QBasicAtomicPointer<T>&)':
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h:263: error: 'L' was not declared in this scope
/usr/local/Trolltech/Qt-4.1.4/lib/QtCore.framework/Headers/qatomic.h:263: error: expected type-specifier before ';' token
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h: In member function 'void QList<T>::node_construct(QList<T>::Node*, const T&)':
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:307: error: 'Lt' was not declared in this scope
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:307: error: expected type-specifier before ';' token
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:308: error: expected type-specifier before 'Lt'
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:308: error: expected `)' before 'Lt'
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:308: error: expected `;' before 'Lt'
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h: In member function 'void QList<T>::node_destruct(QList<T>::Node*)':
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:316: error: expected class-name before '(' token
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:316: error: 'L' was not declared in this scope
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h: In member function 'void QList<T>::node_copy(QList<T>::Node*, QList<T>::Node*, QList<T>::Node*)':
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:324: error: 'L' was not declared in this scope
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:324: error: expected type-specifier before ';' token
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:327: error: expected type-specifier before 'L'
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:327: error: expected `)' before 'L'
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:327: error: expected `;' before 'L'
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h: In member function 'void QList<T>::node_destruct(QList<T>::Node*, QList<T>::Node*)':
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:336: error: expected class-name before '(' token
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:336: error: 'L' was not declared in this scope
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h: In member function 'T QList<T>::value(int) const':
/usr/local/Trolltech/Qt-4.1.4-opensource-dynamic/lib/QtCore.framework/Versions/4.0/Headers/qlist.h:477: error: 'L' was not declared in this scope
test.cpp: At global scope:
test.cpp:4: warning: unused parameter 'argc'
test.cpp:4: warning: unused parameter 'argv'
make: *** [test.o] Error 1
use the following test code:
#include <juce.h>
#include <QMessageBox> // or <Qlist>
int main(int argc, char **argv)
{
}
Thanks!