相关疑难解决方法(0)

在头文件与实现(.cpp)文件中定义构造函数

我可以在类.h文件或实现文件.cpp中定义类构造函数的主体.就编译器在特定项目中而言,这两种样式可能是相同的(项目对我来说意味着DLL).同样适用于任何成员函数:它们可以在头文件中定义,也可以在那里声明,然后在cpp文件中定义.

但是,我发现,如果我需要包括在不同的项目,例如类的头文件(一个或多个)(这意味着最终使用该头文件中的代码不同的最终DLL),则具有在头文件中的实际的实现会导致一些头痛在编译时(不是在链接...我甚至没有达到这一点).为什么?好吧,我不会详细说明,但编译器显然试图解决其他头文件等中可能定义的所有函数,迫使可怜的开发人员开始引入各种头文件等.

是不是总是最好保持头文件没有任何实现,只是将它们用于'声明'?这样可以更容易地将它们包含在多个项目中,而不必携带大量额外的垃圾.

你对此有何看法?

c++ constructor header-files

29
推荐指数
2
解决办法
6万
查看次数

C++错误:类函数的多个定义

我在.h文件中有一个C++ classe,如下所示:

#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
Run Code Online (Sandbox Code Playgroud)

如果我在类声明中添加方法,一切似乎都很好.但是如果我在类声明之外添加方法,我会得到如下错误:

/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 …
Run Code Online (Sandbox Code Playgroud)

c++ linker compiler-errors makefile

2
推荐指数
1
解决办法
8923
查看次数