在C++中,当我们在一个源文件中包含头文件时,头文件中声明的类和函数会自动成为该源文件的一部分。因此,在file2.c中包含了config.h头文件后,其中的类ConfigReader的定义和函数声明会被视为file2.c的一部分,无需使用extern关键字来引用。 extern关键字通常用于在不同的源文件中引用全局变量,以便它们可以在多个文件之间共享。对于类和函数声明,头文件的包含就足够了,不需要使用extern关键字。 在C++中,使用extern关键字可以声明一个变量或函数是在其他文件中定义的全局变量或函数。这样,编译器就知道该变量或函数是在其他文件中定义的,并且可以在当前文件中使用它。 如果不使用extern关键字,而直接在当前文件中定义一个同名的变量或函数,将会创建一个新的局部变量或函数,而不是引用其他文件中的全局变量或函数。这样,两个同名的变量或函数就成为了完全独立的实体,它们的修改和调用也是互相独立的。 因此,使用extern关键字可以将变量或函数的定义从当前文件扩展到其他文件,实现了不同文件之间的共享和访问。而不使用extern关键字,则只是在当前文件中定义了一个新的局部变量或函数,与其他文件中的同名变量或函数没有任何关联。 在C++中,全局变量可以在函数中直接访问,不需要作为参数传递给函数。因此,在function1()中可以直接访问全局变量g的值。全局变量是在程序的全局作用域中定义的,可以被程序中的任何函数访问。在函数中直接访问全局变量可以简化代码,并且不需要显式地传递参数。以下是修改后的代码示例,演示在function1()中直接访问全局变量g的值: #include <iostream>using namespace std;int g = 1;void function1() { if (g) { 在function1()函数中,我们直接访问全局变量g的值,并根据其值进行判断和修改。输出结果将显示全局变量在两个函数中的修改情况。如果您希望在function1()中传递参数g,可以将g作为参数传递给函数,并在函数中使用该参数进行操作。以下是修改后的代码示例: #include <iostream>using namespace std;int g = 1;void function1(int& x) { if (x) { 在function1()函数的参数列表中,我们添加了一个引用参数x,并将全局变量g作为实参传递给该参数。在函数中,我们使用参数x来进行判断和修改操作。输出结果将显示全局变量在两个函数中的修改情况。请注意,这里修改的是全局变量g的值,而不是参数x的值。因为我们传递的是引用参数,所以对参数的修改会影响到原始变量g的值。 signals: void gdowork(QSqlQuery *query, QSqlDatabase *m_DB, ParaSerial serial, myfather *father); 中 serial 被声明了吗,是全局变量还是局部变量? serial是作为一个参数进行声明的。它不是全局变量,也不是局部变量,而是一个信号的参数。 当你发出这个信号时,需要传递一个ParaSerial类型的参数给它。这个参数可以是一个局部变量、全局变量或者其他表达式的结果。 在信号的声明中,
如果每次循环实例化后,worker指针变量将指向一个新的对象,具有不同的地址和内存空间, createAndStartThread()中加入QObject::connect( worker, &Worker::signal,this,SLOT(On()));还会起作用吗 是的,即使在每次循环中实例化后, 这是因为每次实例化新的Worker对象后,都会将该对象的信号signal连接到this对象的槽函数 所以,无论worker指针变量指向的是哪个Worker对象,只要该对象发出了信号signal 请注意,如果在每次循环中实例化新的Worker对象后,不再将其连接到信号和槽上,那么之前的连接将不再起作用。因为每个 |
|