求指点 关于extern

many2023 2012-03-19 04:20:33
我定义了三个类A,B,C。B中有一个A的对象ba,C通过extern A ba 使用B中的ba。但是出现这么一个错误
>3.obj : error LNK2001: 无法解析的外部符号 "class a ba" (?ba@@3Va@@A)
1>D:\many_c++\1231231\Debug\1231231.exe : fatal error LNK1120: 1 个无法解析的外部命令


代码如下:

1.h
#pragma once

class a
{
public:
a(){}
~a(){}
void fun(int i);

};
1.cpp
#include<iostream>
#include "1.h"
using namespace std;
void a::fun(int i)
{
cout<<i;
}
2.h
#pragma once
#include "1.h"
class b
{
public:
b();
~b(){}
a ba;
};
2.cpp
#include"2.h"

b::b()
{}
3.h
#pragma once

class c
{
public:
c();
~c(){}
void f();
};
3.cpp
#include "3.h"
#include "2.h"
#include "1.h"
extern a ba;
c::c()
{}

void c::f()
{
ba.fun(2);
}
4.cpp
#include "1.h"
#include "2.h"
#include "3.h"

int main()
{
b bb;
c cc;
cc.f();
return 0;
}
...全文
91 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaiI0 2012-03-19
  • 打赏
  • 举报
回复
这样也可以,8楼的extern放到.h里,凡是包含了2.h的cpp文件都可以直接访问,你单独在3.cpp extern也可以
many2023 2012-03-19
  • 打赏
  • 举报
回复
我这样通过了:
在2.cpp定义全局变量
a ba;

在3.cpp用extern a ba;

就能用了
many2023 2012-03-19
  • 打赏
  • 举报
回复
还是不明白。可能是我太笨了。
是不是2.h里:
extern ba;
2.cpp
a ba;
3.cpp就可以直接
ba.fun();
dahaiI0 2012-03-19
  • 打赏
  • 举报
回复
你这个ba是b的一个成员变量,这样是不行的,而且要注意声明跟定义的区别,在b中声明ba,只是表示ba是b的成员变量,这里并没有给ba分配内存
把ba定义成全局变量,一般做法是在其头文件extern,在CPP文件定义,比如在2.h里extern ba
2.cpp里定义 a ba;这样在3.cpp里就可以直接访问了
many2023 2012-03-19
  • 打赏
  • 举报
回复
是说没有初始化ba么
mlinlin 2012-03-19
  • 打赏
  • 举报
回复
你在类的内部定义这个变量,然后extern声明一下就可以了,你现在的问题就是只有声明,没有定义
many2023 2012-03-19
  • 打赏
  • 举报
回复
那就把ba定义为全局变量?
Kaile 2012-03-19
  • 打赏
  • 举报
回复
你在B类的内部定义的,extern a ba; 如何找到了?
many2023 2012-03-19
  • 打赏
  • 举报
回复
我不在B类定义了么
guyuexuangyx 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kaile 的回复:]

extern a ba;

ba要在外部定义,这里是声明
[/Quote]
正解
Kaile 2012-03-19
  • 打赏
  • 举报
回复
extern a ba;

ba要在外部定义,这里是声明

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧