Скомпилированная C++ программа пронизана моджибаке?

#include "StdAfx.h"
#include <stdlib.h>
#include <iostream>

#include "mysql_connection.h"

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

using namespace std;

int main(void){
    cout << endl;

    try{
        sql::Driver *driver;
        sql::Connection *con;
        sql::Statement *stmt;
        sql::ResultSet *res;
        sql::PreparedStatement *pstmt;

        driver = get_driver_instance();
        con = driver->connect("REMOVED", "REMOVED", "REMOVED");
        con->setSchema("REMOVED");

        stmt = con->createStatement();
        res = stmt->executeQuery("SELECT username FROM player WHERE id=1");

        cout << "Username: " << res->getString("username") << endl;

        delete res;
        delete con;

        cout << "Done.";
        system("pause");

    }catch(sql::SQLException &e){
        cout << "# ERR: SQLException in " << __FILE__;
        cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
        cout << "# ERR: " << e.what();
        cout << " (MySQL error code: " << e.getErrorCode() << endl;
        cout << ", SQLState: " << e.getSQLState() << " )" << endl;
        system("pause");
    }

    return 0;
}

превращается в... http://i.imgur.com/cIVnl.png

Что происходит?:(Это мой второй день работы с C++, так что простите мне ужасно отформатированное кодирование и другие ошибки nooby. Это всегда проявляется прямо перед тем, как я получаю необработанное исключение.

1 ответ

API, которые вы используете, возвращают std::string объекты, которые я считаю.

В этом случае вы, вероятно, хотите добавить #include <sstream> в начало вашего кода, чтобы у вас был хорошо определенный оператор<< для класса std::string.

Я не уверен в этом решении, потому что ожидал, что вы получите ошибку компиляции, которая каким-то образом намекает на то, что не может быть найден оператор "<<".

Попробуйте вставить это в свой код и сразу вызвать его из main(), чтобы посмотреть, работают ли потоковые операторы. Обратите внимание, что это сделает вашу программу выхода.

void SimpleStrings()
{
    std::string str("String in a std::string");
    const char *psz = "const-char-str";
    std::cout << "std::string: " << str << std::endl << "const char *: " << psz << std::endl;
    exit(1);
}
Другие вопросы по тегам