Question

J'ai lu attentivement la documentation, et regardé les exemples, mais je n'arrive toujours pas à comprendre comment affecter un tableau à une variable globale en C++.Je suis peut-être un peu gâté.Je suis venue à partir de python et l'affectation d'un tableau à une variable globale est vraiment une question simple à l'aide de mysqldb.

Peut une table être assignée à une variable globale pour être accessible à l'extérieur de la mysqlpp classe?

Par exemple, lorsque le code est compilé, j'obtiens l'erreur:erreur:‘sched_recs’ n'a pas été déclarée dans ce champ d'application

#include <mysql++.h>
#include <string>
#include <time.h>

using namespace std;
using namespace mysqlpp;

int SSE (const char* timeStr)
{
  time_t sse;
  struct tm tm;
  strptime(timeStr, "%Y-%m-%d %H:%M:%S", &tm);
  sse = mktime(&tm);
  return (sse);
}

int main()
{
  string table = "sched_recs";
  time_t now, tt; 
  now = time(NULL);

  try
  {
  // Connect to the sample database.
  mysqlpp::Connection conn(false);
  //             databasename,    host,   username, password
  if (conn.connect("dbname", "dbhost", "dbusername", "dbpasswd")) {
      // Retrieve a subset of the sample stock table set up by resetdb
      // and display it.
      //stmt = "select datetime from %s", table 
      mysqlpp::Query query = conn.query("select * from sched_recs");
      mysqlpp::StoreQueryResult sched_recs = query.store();
      //if (mysqlpp::StoreQueryResult tableData = query.store()) {
          ////cout << "We have:" << endl;

      //}
  }
  }
  catch (Exception& e)
  {
    cerr << "Exception: " << e.what() << endl;
  }

  for (size_t i = 0; i < sched_recs.num_rows(); ++i) {
    if (SSE(sched_recs[i][1]) - 60 * 3 < now && SSE(sched_recs[i][2]) > now)
    {
      cout << '\t' << sched_recs[i][1] << endl;
      //system("at -f test.py '18:30' today");
    }
  }

}

Si je, au lieu de passer la boucle de retour dans la classe, alors tout fonctionne bien, mais c'est un facteur limitant.Est-ce la seule façon de le faire?Tous les exemples semblent pour le faire paraître.

Était-ce utile?

La solution

Comme Yaniro suggéré.

Essayez l'extrait de code suivant

#include <mysql++.h>
#include <string>
#include <time.h>

using namespace std;
using namespace mysqlpp;

int SSE (const char* timeStr)
{
  time_t sse;
  struct tm tm;
  strptime(timeStr, "%Y-%m-%d %H:%M:%S", &tm);
  sse = mktime(&tm);
  return (sse);
}

int main()
{
  string table = "sched_recs";
  mysqlpp::StoreQueryResult sched_recs;
  time_t now, tt; 
  now = time(NULL);

  try
  {
  // Connect to the sample database.
  mysqlpp::Connection conn(false);
  //             databasename,    host,   username, password
  if (conn.connect("dbname", "dbhost", "dbusername", "dbpasswd")) {
      // Retrieve a subset of the sample stock table set up by resetdb
      // and display it.
      //stmt = "select datetime from %s", table 
      mysqlpp::Query query = conn.query("select * from sched_recs");
      sched_recs = query.store();
      //if (mysqlpp::StoreQueryResult tableData = query.store()) {
          ////cout << "We have:" << endl;

      //}
  }
  }
  catch (Exception& e)
  {
    cerr << "Exception: " << e.what() << endl;
  }

  for (size_t i = 0; i < sched_recs.num_rows(); ++i) {
    if (SSE(sched_recs[i][1]) - 60 * 3 < now && SSE(sched_recs[i][2]) > now)
    {
      cout << '\t' << sched_recs[i][1] << endl;
      //system("at -f test.py '18:30' today");
    }
  }

}

Noter que la seule différence dans cet exemple et celui que vous avez posté est l'emplacement de la déclaration de la mysqlpp::StoreQueryResult variable appelée sched_recs.

Dans cet exemple, il est déclaré dans le champ d'application de main , plutôt que de la portée du bloc try, de sorte que la valeur de la variable est toujours dans la portée après le bloc try finitions.

Pour plus d'informations sur try et catch bloc de portée voir Exception dangers et inconvénients.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top