1.多次定义
头文件被多个源文件里面的函数也会被多次编译生成可执行文件,就发生了重定义的问题。通过条件编译,可以解决一种情况下的问题,那就是头文件中只声明,而不定义或者说不实现。发生这个问题的本质原因是,当头文件函数被多次编译后,该函数被调用时,编译器不知道该调用哪个函数了,也就是存在二义性问题。
通过内联函数inline解决, 在函数名前加入inline关键字
inline JacobianStorage::JacobianStorage()
{
}
2.const函数修改类成员
(1).使用mutable关键字
(2).造一个假的this去操作成员变量
第一种方法很简单,只需要在成员变量前加mutable即可。
第二种方式,就是造一个const pointer指向this所指对象,然后用这个指针去操作想要修改的成员变量,示例代码和解释如下:
class Class1{
public:
Class1();
~Class1();
void func1() const;
int _value;
};
void Class1::func1() const {
//声明一个指针指向this所指对象,并先将这个对象的常量性转型成const
Class1 * fakeClass1 = const_cast<Class1* const>(this);
//使用造出来的const指针,去修改成员变量
fakeClass1->_value = 1;
}
3.ubuntu 对xxx未定义的引用
未定义的引用(undefined reference)出现的原因是生成可执行文件所在的cpp包含头文件时,头文件中声明的函数定义未被可执行文件所识别,解决办法如下
add_library(library_name SHARED #library为自定义的库名
source.cpp #source.cpp为main.cpp包含的头文件的函数定义文件
)
add_executable(main main.cpp)
target_link_libraries(main library_name)