• 5688阅读
  • 6回复

Linux下编译链接时出错 [复制链接]

上一主题 下一主题
离线caichao07
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-15
request for member 'show' in 'dialog()', which is of non-aggregate type ' StandardDialogs()()"
make:***[main.o] Error 1

使用qmake -project qmake make 进行编译
main代码如下
#include <QtGui/QApplication>
#include "standarddialogs.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
StandardDialogs dialog();
dialog.show();
return app.exec();
}

本人初学QT,谢谢指教!!!
离线wd007

只看该作者 1楼 发表于: 2009-12-15
StandardDialogs dialog();

上面这句不对,应该是:
StandardDialogs dialog;
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线caichao07

只看该作者 2楼 发表于: 2009-12-16
是啊,能解释一下上面的“()”为什么不能加上去吗

谢谢指教!
离线caichao07

只看该作者 3楼 发表于: 2009-12-16
上面那个程序我在编译时又出现了链接问题出错:
[caichao@localhost standarddialogs]$ qmake -project
[caichao@localhost standarddialogs]$ qmake
[caichao@localhost standarddialogs]$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -

I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -

I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -

I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -

I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. -o standarddialogs.o standarddialogs.cpp
/usr/local/Trolltech/Qt-4.3.1/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -

I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -

I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. standarddialogs.h -o moc_standarddialogs.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -

I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -

I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. -o moc_standarddialogs.o moc_standarddialogs.cpp
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.3.1/lib -o standarddialogs main.o standarddialogs.o moc_standarddialogs.o    -L/usr/local/Trolltech/Qt-4.3.1/lib -

lQtGui -L/usr/local/Trolltech/Qt-4.3.1/lib -L/usr/X11R6/lib -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lXcursor -lXinerama -lfreetype -

lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lglib-2.0 -lrt -ldl -lpthread
main.o(.text+0x54): In function `main':
: undefined reference to `StandardDialogs::~StandardDialogs [in-charge]()'
main.o(.text+0x77): In function `main':
: undefined reference to `StandardDialogs::~StandardDialogs [in-charge]()'
moc_standarddialogs.o(.gnu.linkonce.d._ZTV15StandardDialogs+0x14): undefined reference to `StandardDialogs::~StandardDialogs [in-charge]()'
moc_standarddialogs.o(.gnu.linkonce.d._ZTV15StandardDialogs+0x18): undefined reference to `StandardDialogs::~StandardDialogs [in-charge deleting]()'
moc_standarddialogs.o(.gnu.linkonce.d._ZTV15StandardDialogs+0xf4): undefined reference to `non-virtual thunk [nv:-8] to StandardDialogs::~StandardDialogs

[in-charge]()'
moc_standarddialogs.o(.gnu.linkonce.d._ZTV15StandardDialogs+0xf8): undefined reference to `non-virtual thunk [nv:-8] to StandardDialogs::~StandardDialogs

[in-charge deleting]()'
collect2: ld returned 1 exit status
make: *** [standarddialogs] Error 1

请问是什么原因
离线caichao07

只看该作者 4楼 发表于: 2009-12-16
原来是少了 “ 析构函数 ”,现在可以运行了,不过还是不明白为什么要去掉
“()”
离线dbzhang800

只看该作者 5楼 发表于: 2009-12-16
引用第4楼caichao07于2009-12-16 14:04发表的  :
原来是少了 “ 析构函数 ”,现在可以运行了,不过还是不明白为什么要去掉
“()”



你不觉的加上括号后 和 函数声明 无法区分了么?

考虑一下

int  f();
className functionName();
离线caichao07

只看该作者 6楼 发表于: 2009-12-16
引用第5楼dbzhang800于2009-12-16 14:26发表的  :
你不觉的加上括号后 和 函数声明 无法区分了么?
.......

如果不加“()”,不是只有定义没有实例化对象吗
我看过有些类是这样实例化对象

CLASS ClassName( );  
快速回复
限100 字节
 
上一个 下一个