我在当前项目中遇到以下情况:编译器使用以下代码返回“collect2:Id返回1退出状态”:
#ifndef BASE_02_H
#define BASE_02_H
#include <QtCore>
class Base_02
{
public:
Base_02();
virtual void method()=0;
};
#endif // BASE_02_H
#include "base_02.h"
#include <QtCore>
Base_02::Base_02()
{
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef DERIVED_02_H
#define DERIVED_02_H
#include <QtCore>
#include "base_02.h"
class Derived_02 : public Base_02
{
public:
Derived_02();
void method();
};
#endif // DERIVED_02_H
#include "derived_02.h"
#include <QtCore>
Derived_02::Derived_02()
{
}
void Derived_02::method()
{
qDebug() << "Derived_02::method()";
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef BASE_H
#define BASE_H
#include <QtCore>
class Base : public QObject
{
Q_OBJECT
public:
Base(Base* p=NULL);
virtual void method()=0;
};
#endif // BASE_H
#include "base.h"
#include <QtCore>
Base::Base(Base* p)
{
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef DERIVED_H
#define DERIVED_H
#include <QtCore>
#include "base.h"
class Derived : public Base
{
Q_OBJECT
public:
Derived(Derived* p=NULL);
void method();
};
#endif // DERIVED_H
#include "derived.h"
#include "derived_02.h"
#include <QtCore>
Derived::Derived(Derived* p)
{
}
void Derived::method()
{
Derived_02 d;
d.method();
}
//----------------------------------------------------------------------------------------------------------------------------------
#include <QtCore/QCoreApplication>
#include <QtCore>
#include "base.h"
#include "derived.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Derived* derived = new Derived();
return a.exec();
}
编译器说如下:
... mingw32-make:输入目录
C:/Entwicklung SVN/debug test/dataSenderReceiverExample' C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory
C:/ Entwicklung SVN / debug test / dataSenderReceiverExample'g ++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I“.... .. \ Qt \ 2010.04 \ qt \ include \ QtCore“-I”...... \ Qt \ 2010.04 \ qt \ include“-I”.. \ dataSenderReceiver“-I”...... \ Qt \ 2010.04 \ qt \ include \ ActiveQt“-I”debug“-I”...... \ Qt \ 2010.04 \ qt \ mkspecs \ win32-g ++“-o debug \ main.o main.cpp main.cpp:在函数'int main(int,char **)'中:main.cpp:14:警告:未使用的变量'derived'g ++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime -pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug \ dataSenderReceiverExample.exe debug / main.o -L“c:\ Qt \ 2010.04 \ qt \ lib”-L ../ dataSenderReceiver / debug - ldataSenderReceiver -lQtCored4 mingw32-make [1]:离开目录C:/Entwicklung SVN/debug test/dataSenderReceiverExample' mingw32-make: Leaving directory
C:/ Entwicklung SVN / debug test / dataSenderReceiverExample'../ dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN \ debug test \ dataSend erReceiver / derived.cpp:14:未定义引用Derived_02::Derived_02()' ../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:15: undefined reference to
Derived_02 :: method()'collect2:ld返回1退出状态mingw32-make [1]:* [debug \ dataSenderReceiverExample.exe]错误1 mingw32-make:* [debug]错误2 Prozess“C:/Qt/2010.04/mingw/bin/mingw32-make.exe”wurde mitdemRückgabewert%2 wasdet。 Fehler beim Erstellen des Projekts dataSenderReceiverExample(Ziel:Desktop)BeimAusführendesBuild-Schritts'Make'
请帮忙!
#include "base_02.h"
#include <QtCore>
必须:
#include <QtCore>
#include "base_02.h"
然后编译!
我在以下情况下遇到此问题:
说
A是可执行(f.i.控制台)项目,B和C是库(f.i.静态库)项目,A使用B和B使用C.
然后
A必须通过.pro文件知道B库和C库,B必须通过.pro文件知道C库。
说
在.pro文件库C中,在库B之前表示:
LIBS *= -L"../C/debug"
LIBS *= -lC
INCLUDEPATH *= "../C"
LIBS *= -L"../B/debug"
LIBS *= -lB
INCLUDEPATH *= "../B"
然后
确切地说,上述错误确实存在。
解:
A .pro文件中库C之前的名称库B:
LIBS *= -L"../B/debug"
LIBS *= -lB
INCLUDEPATH *= "../B"
LIBS *= -L"../C/debug"
LIBS *= -lC
INCLUDEPATH *= "../C"
I got same problem here...??
#include<iostream>
using namespace std;
class employee{
protected:
int id;
string name;
int day;
int salary;
public:
virtual void calsalary()=0;
};
class facultyemp:public employee{
public:
static int k;
facultyemp(){
k++;
id=k;
}
void setname(){
cout<<"Enter name:";
cin>>name;
}
void setday(){
cout<<"Enter worked days:";
cin>>day;
}
void setsalary(){
cout<<"Enter salary pr day:";
cin>>salary;
}
void getname(){
cout<<"Name: "<<name;
}
void getid(){
cout<<"\nID: "<<id;
}
void calsalary(){
cout<<"The net salary: ";
cout<<day*salary;
}
};
static int k=0;
int main(){
employee *e;
facultyemp f;
e=&f;
f.setname();
f.setday();
f.setsalary();
f.getname();
f.getid();
e->calsalary();
}