
创建了两个.h文建A.h和B.h分别创建两个类A和类B然后创建.c程序文件创建这两个类的对象然后在B.h中用extern引用A类的对象并调用A方法就会报错

这个是和上面一样只是在.h文建中引用了该.h文件里面定义的类的对象结果就是报了上图错误希望能解答一下


关注引自免费微信小程序:皆我百晓生
在C++中,extern关键字用于声明变量或函数在当前作用域外有定义。当在头文件中使用extern声明一个变量时,它告诉编译器这个变量将在其他地方定义,而不需要在这里提供具体的实现。这通常用于将全局变量或函数的声明放在头文件中,而定义放在相应的实现文件中。
根据您提供的信息,看起来您想要在B.h头文件中 extern 引用A类的对象,并在B.cpp中进行初始化和使用。这里有一个例子,展示了如何正确地使用 extern 关键字以及如何解决您的错误。
首先,确保在A.h头文件中定义了一个名为A的类:
// A.h
#ifndef A_H
#define A_H
class A {
public:
void printMessage();
};
#endif // A_H
接下来,在A.cpp中实现A类的方法:
// A.cpp
#include "A.h"
void A::printMessage() {
printf("A");
}
然后,在B.h头文件中,使用 extern 声明A类的对象,并包含A.h头文件:
// B.h
#ifndef B_H
#define B_H
#include "A.h"
extern A* a;
class B {
public:
void callAMethod();
};
#endif // B_H
在B.cpp中,你需要在适当的地方定义 extern A* a:
// B.cpp
#include "B.h"
#include "A.h"
A* a = new A();
void B::callAMethod() {
a->printMessage();
}
注意,您提到的错误列表中的问题与上述示例无关,因为它们涉及到其他部分的代码,比如可能是在使用 scanf_s 函数时格式字符串的问题。这些错误需要单独处理,例如确保格式字符串和实际传入的参数匹配。
为了确保所有东西都按照预期工作,您还需要在主函数中包含B.h和B.cpp,并创建B类的实例来调用其方法:
// main.cpp
#include <iostream>
#include "B.h"
int main() {
B b;
b.callAMethod();
return 0;
}
记得将A.cpp、B.cpp和main.cpp一起编译链接,这样编译器就能正确地链接所有的文件并理解extern声明。如果您使用的是g++,可以这样编译:
g++ -o program A.cpp B.cpp main.cpp
运行程序,你应该能看到"A"被打印出来。这是一个简化的例子,实际开发中可能需要考虑内存管理和异常处理等问题。