1. C++动态库编译连接一个C语言静态库,调用崩溃
    解决:
    在C静态库,每个函数逐个再封装一层函数,并且在外面嵌套一层extern c

类指针

  1. 指针对象为NULL,为什么仍然可以调用成员函数

参考文章1_对象指针为NULL,为什么还是可以调用成员函数

参考文章2——值为NULL的对象指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#include<iostream>
#include<string.h>
using namespace std;
class A
{
public:
static void f1(){ cout<<"f1"<<endl; }
void f2(){ cout<<"f2"<<endl; }
void f3(){ cout<<num<<endl; }
virtual void f4() {cout<<"f4"<<endl; }
public:
int num;
};

int main(int argc,char* argv[])
{

A* pa = NULL;
pa->f1(); //正常
pa->f2(); //正常
pa->f3(); //错误,提示段错误
pa->f4(); //错误,提示段错误
return 0;

}

类的成员函数并不与具体对象绑定,所有的对象共用同一份成员函数体,当程序被编译后,成员函数的地址即已确定,这份共有的成员函数体之所以能够把不同对象的数据区分开来,靠的是隐式传递给成员函数的this指针,成员函数中对成员变量的访问都是转化成”this->数据成员”的方式。因此,从这一角度说,成员函数与普通函数一样,只是多了一个隐式参数,即指向对象的this指针。而类的静态成员函数只能访问静态成员变量,不能访问非静态成员变量,所以静态成员函数不需要指向对象的this指针作为隐式参数。

  • QT程序崩溃:Segmentation fault

描述:

1
2
3
4
The inferior stopped because it received a signal from the operating system.

Signal name: SIGSEGV
Signal meaning: Segmentation fault

出错代码:

http://blog.csdn.net/callmeback/article/details/4242260/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include<iostream>
void printWelcome(int len)
{
printf("欢迎欢迎 -- %d/n", len);
}

void printGoodbye(int len)
{
printf("送客送客 -- %d/n", len);
}

void callback(int times, void(*print)(int))
{
int i;
for (i = 0; i < times; ++i)
{
print(i);
}
printf("/n我不知道你是迎客还是送客!/n/n");
}
void main(void)
{
callback(10, printWelcome);


std::cout << std::endl<< "--------------------------------------------------------------------------------------------" << std::endl;




callback(10, printGoodbye);
std::cout << std::endl << "--------------------------------------------------------------------------------------------" << std::endl;
printWelcome(5);
}
  1. 注册回调函数
    https://blog.csdn.net/mrailence/article/details/52251201
  1. 回调函数demo
  1. 回调函数demo2

  2. 关于回调函数

Fork me on GitHub