我有這樣的.h文件一個C++ CLASSE:C++錯誤:多類函數的定義
#ifndef __GLWidget_h__
#define __GLWidget_h__
class PivotShape
{
// This is allowed
void do_something() { std::cout << "Doing something\n"; }
// This is not allowed
void do_something_else();
}
// This is not allowed
void PivotShape::do_something_else()
{
std::cout << "Doing something else\n";
}
#endif
如果我添加類聲明的一切似乎罰款內的方法。但是如果我在類聲明之外添加方法,我會得到類似這樣的錯誤:
/usr/share/qt4/bin/moc GLWidget.h > GLWidget_moc.cpp
/programs/gcc-4.6.3/installation/bin/g++ -W -Wall -g -c -I./ -I/usr/include/qt4 GLWidget_moc.cpp
/programs/gcc-4.6.3/installation/bin/g++ main.o GLState.o GLWidget.o MainWindow_moc.o GLWidget_moc.o -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtOpenGL -lQtCore -lGLU -lGL -lm -ldl -o main
GLWidget.o: In function `std::iterator_traits<float const*>::iterator_category std::__iterator_category<float const*>(float const* const&)':
/home/<user>/<dir>/<dir>/<dir>/<dir>/<dir>/GLWidget.h:141: multiple definition of `PivotShape::do_someting_else()'
main.o:/home/<user>/<dir>/<dir>/<dir>/<dir>/<dir>/GLWidget.h:141: first defined here
我認爲重做是由Make文件中的這個片段引起的。我認爲.h文件被轉換爲_moc.cpp文件,這是允許多個夾雜物:
# Define linker
LINKER = /programs/gcc-4.6.3/installation/bin/g++
MOCSRCS = $(QTHEADERS:.h=_moc.cpp)
# Define all object files to be the same as CPPSRCS but with all the .cpp
# suffixes replaced with .o
OBJ = $(CPPSRCS:.cpp=.o) $(MOCSRCS:.cpp=.o)
這是什麼問題?如果是這樣,我該如何解決?如果不是,發生了什麼事?
我認爲在C++中將類方法包含在類聲明的主體中是非法的。如果這是合法的,那麼它似乎是解決問題的簡單方法。這合法嗎?
編輯:
我忘了提,我已經發現,聲明該方法爲inline
的作品,但我想知道如何避免重複。
**'inline' **可能現在就派上用場了。 – WhozCraig 2015-02-10 11:41:17