为什么我的值在进入for循环时会发生变化?

Key*_*ead 0 c++ for-loop

    int findPair( const int col1, const Item value1, const int col2, const Item value2 ) {
        std::cout << value1 << std::endl; //displays '1'
        for( int i = 0; i < static_cast<int>( this->rows.size() ); i++ ) {
            std::cout << value1 << std::cout; //Changes into '10x5c09c8'
            if( this->rows[ i ]( col1 ) == value1 ) {
                if( this->rows[ i ]( col2 ) == value2 ) {
                    return i;
                }
            }
            if( this->rows[ i ]( col1 ) == value2 ) {
                if( this->rows[ i ]( col2 ) == value1 ) {
                    return i;
                }
            }
        }
        return -1;
    }
Run Code Online (Sandbox Code Playgroud)

Item类基本上是一个自定义容器,里面有一个union.所有运营商(的常规疑似=,<,>,...)已重载和拷贝构造器为它创建.所有这些都有效,并且已通过一系列单元测试.

当这个运行时,第一个std::out按预期打印'1'(Item保持一个int)但是一旦进入for循环,那个非常相同的值会显示一个看起来像内存地址的东西.这里有某种编译器错误还是我错过了一些非常明显的东西?

我试过没有const,使用unsigned int而不是静态强制转换,将value1复制到一个新的Item,然后检查它但无济于事.

这是以下的<<流操作符Item:

        friend std::ostream & operator<<( std::ostream &output, const Item item ) {
        switch( item.itsType ) {
            case dataType::NONE:
                output << "NULL";
                break;
            case dataType::INTEGER:
                output << item.item_INT;
                break;
            case dataType::DOUBLE:
                output << item.item_DOUBLE;
                break;
            case dataType::STRING:
                output << item.item_STRING;
                break;
            case dataType::BOOLEAN:
                output << item.item_BOOL;
                break;
            default:
                output << "ERROR!";
                break;
        }
        return output;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢.

lar*_*red 5

std::cout << value1 << std::cout; //Changes into '10x5c09c8'

它打印1然后对象的地址std::cout.你可能最后想要std::endl的.