C ++将struct从一个类传递给另一个类

时间:2016-06-03 17:10:54

标签: c++ class struct arguments

我有两个A和B类,分别在A.h,A.cpp和B.h,B.cpp中定义。 A类有一个我想在B类函数中使用的结构。因为B类包含在A类中,所以我不能在B类中包含A类,因为它会导致循环依赖。所有文件的代码如下: A.H

#ifndef _A_H
#define _A_H
#include B.h
namespace common {
    class A {
    public:
        static struct strctOfA {
           float p1 = 2;
        } structA;
        void functionOfA();
    };
}
#endif // !_A_H

A.cpp

#include A.h
using namespace common;
A::functionOfA() {
    B b;
    b.functionOfB(structA);
}

B.h

#ifndef _B_H
#define _B_H
namespace common {
    class B {
    public:
         functionOfB(??);
    };
}
#endif // !_B_H

B.cpp

#include B.h
using namespace common;
B::functionOfB(??) {
        // Want to use structA here;        
}

我查看了StackOverflow,发现thread非常接近我的问题,然而,它们要么没有解释答案,要么我无法理解他们的解决方案。请帮帮我。

由于

更新 感谢I-V指出错误并向我提供解释。更新代码对我有用。感谢大家为我的C / C ++编码技能提供额外的知识。 :)

2 个答案:

答案 0 :(得分:2)

解决方案很简单,你写的是一个坏习惯。

没有理由在A.h中包含B.h,因为你没有在A.h文件中使用B.h的任何部分。实现它的更好方法是在A.cpp中包含B.h而不在头文件中。

它还将解决你所拥有的周期......

通常,当您不在头文件中使用包含文件的函数/对象时,建议在.cpp文件中包含文件而不在头文件中包含文件:)

此外,您应该使用#pragma一次用于Windows或ifndef用于其他任何事情以确保冲突安全

A.H

#ifndef _A_H
#define _A_H
namespace common {
    class A {
    public:
        static struct strctOfA {
           float p1 = 2;
        } structA;
    }
}
#endif

A.cpp

#include A.h
#include B.h
using namespace common;
class A {
    B b;
    b.functionOfB(structA);
}

注意:来自B.cpp包括A.h

答案 1 :(得分:0)

这可以通过前向声明来完成,除非你绝对必须通过值传递它。但我想不出这种方法不适用于参考文献。

A.H

#ifndef A_H_
#define A_H_

struct B;
struct A {void f(B&);};

#endif

A.cpp

#include "B.h"
void A::f(B & value) {/* do something */ };

B.h

#ifndef B_H_
#define B_H_


struct A;
struct B {void f(B&);};

#endif

B.cpp

#include "A.h"
void B::f(A & value) {/* do something */ };

如果你需要A中的B值只有一个前向声明,你可以把它放在一个指针中,即使用std :: unique_ptr。