我需要将一个指向类实例的指针传递给另一个类中的函数,以便该函数可以访问第一个类的一些公共变量。
虽然我不是C ++的新手,但这是我第一次以这种方式使用指针,所以我不太明白如何使这个工作。
我已经完成的工作类似于以下内容:
class foo
{
public:
int data;
};
class bar
{
public:
void function(foo *ptr); //error points to this line
};
void bar::function(foo *ptr)
{
ptr->data = 1; //do something with data inside foo class.
}
main()
{
foo foo1; //init foo as foo1.
foo *ptr_foo; //pointer of type foo called ptr_foo
prt_foo = &foo1; //point ptr_foo to the address of foo1
bar bar1; //init bar as bar1
bar1.function(ptr_foo) //call function1 and pass the address of our instance of foo to it.
}
我从类栏中得到错误,在行定义函数(foo * ptr)上说“语法错误:标识符'foo'”。
当我在main()中尝试调用函数(foo ptr *)时,我也得到错误“'bar :: function':函数不带1个参数”,我相信这是第一个错误链接是吗?
在我正在处理foo()的程序中,bar()和main()都在与头文件链接的不同源文件中。这会导致我的问题吗?
我发现这方面的指针难以理解,没有多少阅读能帮助解决这个特殊问题。
如果有人可以告诉我如何使这项工作变得更好,那么解释解决方案中的解决方案以及为什么我所做的不起作用会更好。
感谢您的帮助。
编辑:上面的代码不打算编译。我的实际代码比合理发布的代码大很多。
答案 0 :(得分:2)
如果foo和bar位于单独的标题中,请在bar类声明之前在bar中添加前向声明:
class foo;
答案 1 :(得分:0)
该错误表明定义class bar
的文件不了解class foo
。在定义#include
之前,您需要class foo
class bar
的标头文件。
答案 2 :(得分:0)
一旦明显的拼写错误得到修复,您发布的代码就会编译。
也许,在您的真实代码中,bar.h
不会转发声明class foo;
,因此编译器说没有foo
的声明。你需要这样做,或者如果标题需要做任何复杂的事情,你可能需要包含foo
的完整定义。
或者foo.h
和bar.h
两者都包括尝试相互包含,这是不可能的。如果是这种情况,应该可以删除一个或两个包含,如果需要,用前向声明替换它们。
如果这些都没有帮助,那么请尝试将代码缩减为 重现错误的简单测试用例。如果您在执行此操作时未发现问题的原因,那么您将在此处发布一个好的测试用例。