This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TIDA-00254_3D_Scanner_LCr4500_PGFlea3-1.1 for vs2012 and vs2015 got error message in other.hpp(140): error C2593: “operator <<”is ambiguous

Hi, 

I get an error using  vs2015 platform.
and get the same error on vs2012 platform.

How can I solve this problem?

Thank you!

/** \brief  Contains common functions to convert numbers to strings

 *  \ingroup common

 */

namespace Number{

 

    /** \brief Converts a numerical variable to its ASCII string equivalent */

    template <typename T>

    std::string ToString( T number ){

        std::ostringstream ss;

        ss << std::setprecision(NUM_TO_STRING_PRECISION);        

        ss << number; 

        return ss.str();

    } 

    template <> std::string ToString<char>( char number );

    template <> std::string ToString<unsigned char>( unsigned char number );

}

1>F:\VS_work\GPURenderingApp\GPURenderingApp\include\common/other.hpp(141): error C2593: “operator <<”不明确
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(497): note: 可能是“std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_streambuf<char,std::char_traits<char>> *)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(477): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(const void *)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(457): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long double)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(437): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(double)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(417): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(float)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(396): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned __int64)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(376): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(__int64)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(355): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned long)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(335): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(315): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned int)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(290): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(int)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(270): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned short)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(236): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(short)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(216): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(bool)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(209): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(202): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ios<char,std::char_traits<char>> &(__cdecl *)(std::basic_ios<char,std::char_traits<char>> &))”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(196): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ostream<char,std::char_traits<char>> &(__cdecl *)(std::basic_ostream<char,std::char_traits<char>> &))”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(694): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(741): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(779): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(826): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(952): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const signed char *)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(959): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,signed char)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(966): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const unsigned char *)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(973): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,unsigned char)”
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(983): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>,T>(std::basic_ostream<char,std::char_traits<char>> &&,const _Ty &)”
1> with
1> [
1> T=dlp::LCr4500::Settings::ImageFlip::ShortAxis::Mode,
1> _Ty=dlp::LCr4500::Settings::ImageFlip::ShortAxis::Mode
1> ]
1> E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream(1021): note: 或 “std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const std::error_code &)”
1> F:\VS_work\to zhaodong\GPURenderingApp\GPURenderingApp\include\common/other.hpp(141): note: 尝试匹配参数列表“(std::ostringstream, dlp::LCr4500::Settings::ImageFlip::ShortAxis::Mode)”时
1> src\dlp_platforms\lightcrafter_4500\lcr4500_settings.cpp(383): note: 参见对正在编译的函数 模板 实例化“std::string dlp::Number::ToString<dlp::LCr4500::Settings::ImageFlip::ShortAxis::Mode>(T)”的引用
1> with
1> [
1> T=dlp::LCr4500::Settings::ImageFlip::ShortAxis::Mode
1> ]
1>F:\VS_work\to zhaodong\GPURenderingApp\GPURenderingApp\include\common/other.hpp(141): error C2088: “<<”: 对于 class 非法

  • Hi Chester,

    We have not experienced this issue using the build procedure outlined in the reference design. We hope other forum user's who have experienced a similar issue can provide insight.

    Thanks,
    Clinton
  • Hi Clinton,
    This problem has been solved, class ostringstream cannot recognize enum class, which is a new feature in C++11, just modify such code as following:
    /** \brief Gets the default entry for the parallel port clock select entry setting on LightCrafter 4500*/
    std::string LCr4500::Settings::ParallelClockSelect::GetEntryDefault() const{
    // return dlp::Number::ToString(PORT_1_CLOCK_A);
    std::string str("PORT_1_CLOCK_A");
    return str;
    }

    Thanks,
    Chester
  • Hello Chester,

    I also need to compile 3D scanning reference design software with VC++. Is it possible for you to share how you compiled the software with VC++? Simple bullet points of steps might suffice. Thanks.
  • Hi,

    I perform the following steps:
    (1) VS platform must be 2013 or later, which fully supports C++11, I use vs2015 now,;
    (2) Rebuild openCV for VS2015 platform;
    (3) Because I use Qt, so I rebuild Qt for VS2015 platform.
    (4) class ostringstream cannot recognize enum class, so we need to change the code as the above mentioned.

    I perform scan on VS2015, but the scanned images are not all correct now, I hope you can help me to solve this problem.
    Thanks.
  • Thanks. That will help.

    About your change of ToString usages, I think it's not correct because according to content of ToString, the resulting string should be a string of number. For example, PORT_1_CLOCK_A is 0 in integer, Thus Number::ToString should return "0" instead of your solution.

  • Thanks, I has changed my code. However, the generated horizontal pattern image is still wrong on vs2015.

  • Sorry for late reply. If you changed as I told you - that kind of patterns are in multiple places, you should not have any problem. I was successfully able to compile it with VS 2015 and run the program. It produced exactly same point clouds as the MinGW one did.