Hi Ned. The generated C++ class does not have an explicit constructor, as you've pointed out. This is by design. the fields in the DDL class definition become private members of the C++ class. It is expected that you assign values to each one of them separately, rather than through a constructor. There are explicit setters for basic types such as bools or ints. However, for strings, you get a reference to the private string member variable (using a getter) and then set it. So, in your example, you could do something like this:
Text t = new Text(); t.getText().assign("whatever value you want"); // assign a value to the 'text' field Suppose your class Text had an additional bool parameter: module io { class Text { ustring text; boolean b; } } There'd be a setter for 'b' in the generated C++ class, and you'd do something like: Text t = new Text(); t.setB(true); It's only for the more complex types (strings, maps, vectors) that you don't have explicit setters. You use a getter to get a reference object to the member variable, then assign values to it. AFAIK, the C++ generated classes are not broken. They're a bit different from the Java classes, which have setters for each field (and you could discus whether the C++ and Java classes should look more like each other), but they work. -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Ned Rockson Sent: Thursday, January 10, 2008 1:34 AM To: hadoop-user@lucene.apache.org Subject: Problem with autogenerated C++ Records using bin/rcc Recently I've been trying to autogenerate some data structures that will work for both C++ and Java. I've made many that work with Java, but every time I try to generate one for C++ the generator breaks down. For instance, I was trying to create a Text class for C++, so I created a text.jr: module io { class Text { ustring text; } } that in Java works fine, but in C++, this is generated (implementation is fine for the methods defined): #ifndef __TEXT_DDL__ #define __TEXT_DDL__ #include "recordio.hh" namespace io { class Text : public ::hadoop::Record { private: ::std::string text; public: virtual void serialize(::hadoop::OArchive& a_, const char* tag) const; virtual void deserialize(::hadoop::IArchive& a_, const char* tag); virtual const ::std::string& type() const; virtual const ::std::string& signature() const; virtual bool operator<(const Text& peer_) const; virtual bool operator==(const Text& peer_) const; virtual ~Text() {}; virtual const ::std::string& getText() const { return text; } virtual ::std::string& getText() { return text; } }; // end record Text } // end namespace io #endif //TEXT_DDL__ What is obviously missing is -a constructor, -a setter (there are getters for const and non-const...) This is with hadoop-0.15.1 and I've also tried following the examples given in the API to no luck. Thanks for any feedback!