두 클래스가 있으며 key
의 성격에 따라 boost::variant
에서 구조체 값을 가져오고 싶습니다. 코드는 다음과 같습니다. 내가 얻고Boost Variant를 struct 객체와 함께 사용하는 방법 C++
#include <iostream>
#include <boost/variant.hpp>
using namespace std;
class A {
public:
struct greeting {
string hello;
};
class B {
public:
struct greeting {
string bye;
};
};
typedef boost::variant<A::greeting, B::greeting> greet;
greet getG(string key) {
greet g;
if (key == "A") {
g.hello = "MY ENEMY"; // this line doesn't work
}
else {
g.bye = "MY FRIEND"; // nor this line
}
return g;
};
int main() {
A a;
B b;
greet h = getG("A");
A::greeting my = boost::get<A::greeting>(h);
cout << my.hello << endl;
return 0;
}
정확한 오류는 다음과 같습니다 error: no member named 'hello' in 'boost::variant<A::greeting, B::greeting, boost::detail::variant::void_, boost::detail::variant::void_, ...>' g.hello = "MY ENEMY";
및 error: no member named 'bye' in 'boost::variant<A::greeting, B::greeting, .../>' g.bye = "MY FRIEND";
어떤 도움에 감사드립니다.
라인 번호를 쉽게 특정 라인을 찾을 수 있습니다하지만, 그것은 또한 매우 열심히한다. 오류가있는 행을 표시하는 주석이면 충분합니다. –
문제에 대해서는 특정 구조에 대한 참조를 얻으려면 ['boost :: get'] (http://www.boost.org/doc/libs/1_63_0/doc/html/boost/get_idp1003723808.html)를 사용하십시오 . (사용 방법에 대한 예제는 [Boost variant tutorial] (http://www.boost.org/doc/libs/1_63_0/doc/html/variant/tutorial.html)을 참조하십시오. –