Salve ragazzi, nel codice postato qui sotto ho il seguente errore di compilazione. Uso visual studio 2010.

6>FirstSample.obj : error LNK2019: unresolved external symbol "public: bool __thiscall SavePointCloud:nImageGrabbed(struct GenTLConsumerImplHelper::GrabResult,class std::vector<struct GenTLConsumerImplHelper::PartInfo,class std::allocator<struct GenTLConsumerImplHelper::PartInfo> >)" (?onImageGrabbed@SavePointCloud@@QAE_NUGrabResult@ GenTLConsumerImplHelper@@V?$vector@UPartInfo@GenTL ConsumerImplHelper@@V?$allocator@UPartInfo@GenTLCo nsumerImplHelper@@@std@@@std@@@Z) referenced in function "public: int __thiscall SavePointCloud::run(void)" (?run@SavePointCloud@@QAEHXZ)
6>C:\Users\sony\Desktop\Basler\ToF\Samples\Cpp\Deb ug\FirstSample.exe : fatal error LNK1120: 1 unresolved externals

Qualcuno ha un idea di cosa voglia dire?

codice:
#include "stdafx.h"
#include <ConsumerImplHelper/ToFCamera.h>
#include <iostream>
#include <iomanip> 


#if defined (_MSC_VER) && defined (_WIN32)
// You have to delay load the GenApi libraries used for configuring the camera device.
// Refer to the project settings to see how to instruct the linker to delay load DLLs. 
// ("Properties->Linker->Input->Delay Loaded Dlls" resp. /DELAYLOAD linker option).
#  pragma message( "Remember to delayload these libraries (/DELAYLOAD linker option):")
#  pragma message( "    /DELAYLOAD:\"" DLL_NAME("GCBase") "\"")
#  pragma message( "    /DELAYLOAD:\"" DLL_NAME("GenApi") "\"")
#endif










#include <GenTL/PFNC.h>
#include <string>


#include <fstream>


#include <stdio.h>
#include <cstdio>
#include <sstream>




using namespace GenTLConsumerImplHelper;
using namespace GenApi;
using namespace std;


void WritePcdHeader( ostream& o, size_t width, size_t height, bool saveIntensity )
{
    o << "# .PCD v0.7 - Point Cloud Data file format" << endl;
    o << "VERSION 0.7" << endl;
    o << "FIELDS x y z rgb" << endl;
    o << "SIZE 4 4 4";
    if ( saveIntensity )
        o << " 4";
    o << endl;


    o << "TYPE F F F";
    if ( saveIntensity )
        o << " F";
    o << endl;


    o << "COUNT 1 1 1";
    if ( saveIntensity )
        o << " 1";
    o << endl;


    o << "WIDTH " << width << endl;
    o << "HEIGHT " << height << endl;
    o << "VIEWPOINT 0 0 0 1 0 0 0" << endl;
    o << "POINTS " << width * height << endl;
    o << "DATA ASCII" << endl;
}












using namespace GenTLConsumerImplHelper;
using namespace std;


class SavePointCloud
{
public:
    int run();


    bool onImageGrabbed( GrabResult grabResult , BufferParts );


private:
    CToFCamera  m_Camera;
    int         m_nBuffersGrabbed;
};








int SavePointCloud::run()
{
    m_nBuffersGrabbed = 0;


    try
    {
        // Open the first camera found, i.e., establish a connection to the camera device. 
        m_Camera.OpenFirstCamera();


        /*  CToFCamera::OpenFirstCamera() is a shortcut for the following sequence:
            CameraList cameras = CToFCamera::EnumerateCameras();
            CameraInfo camInfo = *cameras.begin();
            m_Camera.Open(camInfo);


            If there are multiple cameras connected and you want to open a specific one, use
            the CToFCamera::Open( CameraInfoKey, string ) method.
                
            Example: Open a camera using its IP address
            CToFCamera::Open( IpAddress, "192.168.0.2" );


            Instead of the IP address, any other property of the CameraInfo struct can be used, 
            e.g., the serial number or the user-defined name:


            CToFCamera::Open( SerialNumber, "23167572" );
            CToFCamera::Open( UserDefinedName, "Left" );
        */


        cout << "Connected to camera " << m_Camera.GetCameraInfo().strDisplayName << endl;


        // Enable 3D (point cloud) data, intensity data, and confidence data. 
        GenApi::CEnumerationPtr ptrComponentSelector = m_Camera.GetParameter("ComponentSelector");
        GenApi::CBooleanPtr ptrComponentEnable = m_Camera.GetParameter("ComponentEnable");
        GenApi::CEnumerationPtr ptrPixelFormat = m_Camera.GetParameter("PixelFormat");


        // Enable range data.
        ptrComponentSelector->FromString("Range");
        ptrComponentEnable->SetValue(true);
        // Range information can be sent either as a 16-bit grey value image or as 3D coordinates (point cloud). For this sample, we want to acquire 3D coordinates.
        // Note: To change the format of an image component, the Component Selector must first be set to the component
        // you want to configure (see above).
        // To use 16-bit integer depth information, choose "Mono16" instead of "Coord3D_ABC32f".
        ptrPixelFormat->FromString("Coord3D_ABC32f" );


        ptrComponentSelector->FromString("Intensity");
        ptrComponentEnable->SetValue(true);


        ptrComponentSelector->FromString("Confidence");
        ptrComponentEnable->SetValue(true);


        // Acquire images until the call-back onImageGrabbed indicates to stop acquisition. 
        // 5 buffers are used (round-robin).
		m_Camera.GrabContinuous( 50, 500, this, &SavePointCloud::onImageGrabbed );


        // Clean-up
        m_Camera.Close();
    }
    catch ( const GenICam::GenericException& e )
    {
        cerr << "Exception occurred: " << e.GetDescription() << endl;
        // After successfully opening the camera, the IsConnected method can be used 
        // to check if the device is still connected.
        if ( m_Camera.IsOpen() && ! m_Camera.IsConnected() )
        {
            cerr << "Camera has been removed." << endl;
        }


        return EXIT_FAILURE;
    }


    return EXIT_SUCCESS;
}






bool SavePointCloud( const BufferParts parts, const char* fileName )
{
    if ( parts.empty() )
    {
        cerr << "No valid image data." << endl;
        return false;
    }


    // If the point cloud is enabled, the first part always contains the point cloud data.
    if ( parts[0].dataFormat != PFNC_Coord3D_ABC32f )
    {
        cerr << "Unexpected data format for the first image part. Coord3D_ABC32f is expected." << endl;
        return false;
    }


    const bool saveIntensity = parts.size() > 1;
    if ( saveIntensity && parts[1].dataFormat != PFNC_Mono16 )
    {
        cerr << "Unexpected data format for the second image part. Mono 16 is expected." << endl;
        return false;
    }


    ofstream o( fileName );
    if ( ! o )
    {
        cerr << "Error:\tFailed to create file "<< fileName << endl;
        return false;
    }
	
    
    CToFCamera::Coord3D *pPoint = (CToFCamera::Coord3D*) parts[0].pData;
    uint16_t *pIntensity = saveIntensity ? (uint16_t*) parts[1].pData : NULL;
    const size_t nPixel = parts[0].width * parts[0].height;


    WritePcdHeader( o, parts[0].width, parts[0].height, saveIntensity );


    for ( size_t i = 0; i < nPixel; ++i )
    {
        // Check if there are valid 3D coordinates for that pixel.
        if ( pPoint->IsValid() )   
        {
            o.precision( 0 );  // Coordinates will be written as whole numbers.
 
            // Write the coordinates of the next point. Note: Since the coordinate system
            // used by the CloudCompare tool is different from the one used by the ToF camera, 
            // we apply a 180-degree rotation around the x-axis by writing the negative 
            // values of the y and z coordinates.
            o << std::fixed << pPoint->x << ' ' << -pPoint->y << ' ' << -pPoint->z;
            
            if ( saveIntensity )
            {
                // Save the intensity as an RGB value.
                uint8_t gray = *pIntensity >> 8;
                uint32_t rgb = (uint32_t) gray << 16 | (uint32_t) gray << 8 | (uint32_t) gray;
                // The point cloud library data format represents RGB values as floats. 
                float fRgb = * (float*) &rgb;
                o.unsetf(ios_base::floatfield); // Switch to default float formatting
                o.precision(9); // Intensity information will be written with highest precision.
                o << ' ' << fRgb << endl;
            }
        }
        else
        {
            o << "nan nan nan 0" << endl;
        }
        pPoint++;
        pIntensity++;
    }
    o.close();
    cout << "done." << endl;
    return true;
}










//bool Sample::onImageGrabbed( GrabResult grabResult, BufferParts parts )
//{
//    if ( grabResult.status == GrabResult::Timeout )
//    {
//        cerr << "Timeout occurred. Acquisition stopped." << endl;
//        // The timeout might be caused by a removal of the camera. Check if the camera
//        // is still connected.
//        if ( ! m_Camera.IsConnected() )
//        {
//            cerr << "Camera has been removed." << endl;
//        }
//
//        return false; // Indicate to stop acquisition
//    }
//    m_nBuffersGrabbed++;
//    if ( grabResult.status != GrabResult::Ok )
//    {
//        cerr << "Image " << m_nBuffersGrabbed << "was not grabbed." << endl;
//    }
//    else
//    {
//        // Retrieve the values for the center pixel
//        const int width = (int) parts[0].width;
//        const int height = (int) parts[0].height;
//        const int x = (int) (0.5 * width);
//        const int y = (int) (0.5 * height);
//        CToFCamera::Coord3D *p3DCoordinate = (CToFCamera::Coord3D*) parts[0].pData + y * width + x;
//        uint16_t *pIntensity = (uint16_t*) parts[1].pData + y * width + x;
//        uint16_t *pConfidence = (uint16_t*) parts[2].pData + y * width + x;
//
//        cout << "Center pixel of image " << setw(2) << m_nBuffersGrabbed << ": ";
//        cout.setf( ios_base::fixed);
//        cout.precision(1);
//        if ( p3DCoordinate->IsValid() )
//            cout << "x=" << setw(6) <<  p3DCoordinate->x << " y=" << setw(6) << p3DCoordinate->y << " z=" << setw(6) << p3DCoordinate->z;
//        else
//            cout << "x=   n/a y=   n/a z=   n/a";
//        cout << " intensity="<< setw(5) << *pIntensity << " confidence=" << setw(5) << *pConfidence << endl;
//    }
//    return m_nBuffersGrabbed < 10; // Indicate to stop acquisition when 10 buffers are grabbed
//}


int main(int argc, char* argv[])
{
    int exitCode = EXIT_SUCCESS;
    
    try
    {
        CToFCamera::InitProducer();


        SavePointCloud ;




        exitCode = EXIT_SUCCESS;
    }
    catch ( GenICam::GenericException& e )
    {
        cerr << "Exception occurred: " << endl << e.GetDescription() << endl;
        exitCode = EXIT_FAILURE;
    }


    // Release the GenTL producer and all of its resources. 
    // Note: Don't call TerminateProducer() until the destructor of the CToFCamera
    // class has been called. The destructor may require resources which may not
    // be available anymore after TerminateProducer() has been called.
    if ( CToFCamera::IsProducerInitialized() )
        CToFCamera::TerminateProducer();  // Won't throw any exceptions


    cout << endl << "Press Enter to exit." << endl;
    while (cin.get() != '\n');


    return exitCode;
}