c++在一个cpp中使用另一个cpp中的类对象?
希望大家帮我看看,c++工程中有两个cpp文件,在1.cpp文件中一个函数中创建一个A类对象one(){Aa;}在2.cpp中的一个two()函数中想使用这个对象a应该怎...
希望大家帮我看看,
c++工程中有两个cpp文件,
在1.cpp文件中一个函数中 创建一个A类对象
one()
{
A a;
}
在2.cpp中的一个two()函数中想使用这个对象a 应该怎样做呢?
two()
{
a.fun();
}
对于类A已经声明和定义过了,在A.h 和A.cpp中
我在2.cpp中包含了头文件#include“a.h” 和 extern A a;
但是在链接时出现错误
1>two.obj : error LNK2001: 无法解析的外部符号 "class A a" (?a@@3VA@@A) 展开
c++工程中有两个cpp文件,
在1.cpp文件中一个函数中 创建一个A类对象
one()
{
A a;
}
在2.cpp中的一个two()函数中想使用这个对象a 应该怎样做呢?
two()
{
a.fun();
}
对于类A已经声明和定义过了,在A.h 和A.cpp中
我在2.cpp中包含了头文件#include“a.h” 和 extern A a;
但是在链接时出现错误
1>two.obj : error LNK2001: 无法解析的外部符号 "class A a" (?a@@3VA@@A) 展开
4个回答
展开全部
首先,a是函数one中的局部对象,函数one之外的部分是无法访问a的。
你如果 想要访问1.cpp中的a,需要使用全局变量,考虑到编译顺序的问题,你可以这样写:
A & Geta()
{
static A a;
return a;
}
在1.h中写这个函数的声明,1.cpp中写这个函数的定义。然后包含1.cpp通过Geta()就可以直接访问a了。举例: Geta().fun();
你如果 想要访问1.cpp中的a,需要使用全局变量,考虑到编译顺序的问题,你可以这样写:
A & Geta()
{
static A a;
return a;
}
在1.h中写这个函数的声明,1.cpp中写这个函数的定义。然后包含1.cpp通过Geta()就可以直接访问a了。举例: Geta().fun();
追问
如果将这个问题再改一下
c++工程中有3个cpp文件,
在1.cpp文件中一个函数one()
在2.cpp中的一个two()
在3.cpp中是主函数main()
main()
{
A a; //在主函数中创建了A类的对象a
one();
two();
}
怎样在one() two() 函数定义中使用这个a对象呢????
追答
直接访问没有办法。因为对象a是在main函数所在源文件也就是CPP文件中声明的,而CPP是无法像.h文件那样通过包含可访问.h中声明的全局对象,更何况是main函数中的局部对象。
要操作a只有这两种方式:
one()和two的参数类型写为: one(A &a)或者one(A *a)
前者在one函数中可直接调用a,如a.func()
后者在one函数中要写成(*a).func() 或者 a->func(),两者本质上是一样的,只不过前者是C++的一种方便程序员读义的语法规则而已。
顺便说一下,楼主选择的那个答案一开始没有那样回答,他是在我回答之后修改成那样的,看回答时间就知道。你一直没有选择答案,我特意之前留意了几次。对全局对象的使用方法最安全的就只有我之前给的那种方式,具体可去参见CSDN上面的博客。
而且他给的第1)条与第2)条完全不能实用,如果返回引用(&)类型的函数内部不使用static修饰的话(也就是静态变量),每次使用都是初值,完全不能作为全局对象来使用,他只不过是把我的静态局部对象作全局对象的方法拷贝过去然后写了不相关的类似函数体做含义解释而已!
只是想提醒楼主,以后选择正确答案之前先三思一下,别让别人的好心白费。
展开全部
one() 创建的哪个A是局部变量, 其他地方不能用的.
你可以用下面的方法:
// one函数创建一个A并返回
A* one()
{
new A;
}
void two()
{
A* one(); // 声明有个函数one可以创建A
A* a=one(); // 得到创建的A
a->fun(); // 调用函数
delete a; // 删除a
}
你可以用下面的方法:
// one函数创建一个A并返回
A* one()
{
new A;
}
void two()
{
A* one(); // 声明有个函数one可以创建A
A* a=one(); // 得到创建的A
a->fun(); // 调用函数
delete a; // 删除a
}
追问
如果将这个问题再改一下
c++工程中有3个cpp文件,
在1.cpp文件中一个函数one()
在2.cpp中的一个two()
在3.cpp中是主函数main()
main()
{
A a; //在主函数中创建了A类的对象a
one();
two();
}
怎样在one() two() 函数定义中使用这个a对象呢????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1)
A one()
{
return A() ;
}
two()
{
one().fun();
}
2)外部变量
//1.cpp
A a;
A& one()
{
return a ;
}
//2.cpp
two()
{
one().fun();
}
3)局部静态变量
//1.cpp
A& one()
{
static A a;
return a ;
}
//2.cpp
two()
{
one().fun();
}
A one()
{
return A() ;
}
two()
{
one().fun();
}
2)外部变量
//1.cpp
A a;
A& one()
{
return a ;
}
//2.cpp
two()
{
one().fun();
}
3)局部静态变量
//1.cpp
A& one()
{
static A a;
return a ;
}
//2.cpp
two()
{
one().fun();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
2.cpp 要用 exetern A a;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询