-1

代码:

// Include the top-level Vertica SDK file
#include "/opt/vertica/sdk/include/Vertica.h"
#include <sstream>
#include <iostream>
using namespace Vertica;
using namespace std;
// Using the Vertica namespace means we don't have to prefix all
// class references with Vertica::
using namespace Vertica;
/*
* ScalarFunction implementation for a UDSF that adds
* two numbers together.
*/
class Add2Ints : public ScalarFunction
{
public:
/*
* This function does all of the actual processing for the UDF.
* In this case, it simply reads two integer values and returns
* their sum.
*
* The inputs are retrieved via arg_reader
* The outputs are returned via arg_writer
*/
    virtual void processBlock(ServerInterface &srvInterface,
                                BlockReader &arg_reader,
                                BlockWriter &res_writer)
    {
        // While we have input to process
        do
        {
            // Read the two integer input parameters by calling the
            // BlockReader.getIntRef class function
            const vint a = arg_reader.getIntRef(0);
            const vint b = arg_reader.getIntRef(1);
            // Call BlockWriter.setInt to store the output value, which is
            // two input values added together
            res_writer.setInt(a+b);
            // Finish writing the row, and advance to the next output row
            res_writer.next();
            // Continue looping until there are no more input rows
        }
        while (arg_reader.next());
    }
};
/*
* This class provides metadata about the ScalarFunction class, and
* also instantiates a member of that class when needed.
*/
class Add2IntsFactory : public ScalarFunctionFactory
{
    // return an instance of Add2Ints to perform the actual addition.
    virtual ScalarFunction *createScalarFunction(ServerInterface &interface)
    {
        // Calls the vt_createFuncObj to create the new Add2Ints class instance.
        return vt_createFuncObj(interface.allocator, Add2Ints);
    }

    virtual void getPrototype(ServerInterface &interface,
                                ColumnTypes &argTypes,
                                ColumnTypes &returnType)
    {
        // Takes two ints as inputs, so add ints to the argTypes object
        argTypes.addInt();
        argTypes.addInt();
        // returns a single int, so add a single int to the returnType object.
        // Note that ScalarFunctions *always* return a single value.
        returnType.addInt();
    }
};

// Determine the length of the varchar string being returned.
virtual void Add2IntsFactory::getReturnType(ServerInterface &srvInterface,const SizedColumnTypes &argTypes,SizedColumnTypes &returnType)
{
    const VerticaType &t = argTypes.getColumnType(0);
    returnType.addVarchar(t.getVarcharLength());
}
// Register the factory with Vertica
RegisterFactory(Add2IntsFactory);

错误 :

'::' 标记之前的预期初始化程序

能否请你帮忙?

4

1 回答 1

0

您的函数Add2IntsFactory::getReturnType在类之外声明。你不能这样做。

于 2013-05-29T08:29:29.260 回答