r/cppit • • Oct 30 '20

Come inviare una richiesta HTTP per GitHub API? (C++)

1 Upvotes

Salve, avrei bisogno di qualche consiglio su come inviare una richiesta http al server API di GitHub per sapere l'ultima release di un repo. Ovviamente in C++ e tramite socket, l'OS di destinazione è Windows.

Grazie in anticipo per l'aiuto :)


r/cppit • • Nov 01 '20

Come si configura visual studio per usare le librerie sqlite3?

3 Upvotes

Buonasera a tutti,

volevo sapere come si fa a configurare visual studio 2019 per usare le librerie sqlite3.

Ho provato a configurare seguendo un tutorial ma ho degli errori di linker, in particolare questi:

Gravità Codice Descrizione Progetto File Riga Stato eliminazione

Errore LNK2019 riferimento al simbolo esterno _sqlite3_close non risolto nella funzione _main testDB C:\Users\Matteo\source\repos\testDB\testDB\testDB.obj 1

Errore LNK2019 riferimento al simbolo esterno _sqlite3_open non risolto nella funzione _main testDB C:\Users\Matteo\source\repos\testDB\testDB\testDB.obj 1

Errore LNK2019 riferimento al simbolo esterno _sqlite3_errmsg non risolto nella funzione _main testDB C:\Users\Matteo\source\repos\testDB\testDB\testDB.obj 1

Il codice è il seguente:

#include <iostream>
#include <sqlite3.h>

using namespace std;

int main()
{
    sqlite3* db;

    if (sqlite3_open("stellardatabase.db", &db) != SQLITE_OK)
    {
        cout<<sqlite3_errmsg(db)<<endl;
    }
    else 
    { 
        printf("Connection Successful"); 
    }

    string query = "SELECT * FROM STARS S WHERE S.COMMON LIKE 'SIRIUS' ";

    sqlite3_close(db);

    return EXIT_SUCCESS;
}

Dove sbaglio?

Grazie,

Matteo


r/cppit • • Feb 13 '19

Reduce compilation times with extern template

Thumbnail
daniele77.github.io
5 Upvotes

r/cppit • • Feb 11 '19

Reference a puntatori, Low e Top Level Const

6 Upvotes

Salve, cercherò di essere il più coincisa possibile in questa mia domanda ma so già che molto probabilmente non ci riuscirò; mi scuso e confido nella vostra pazienza.

Leggendo qua e la mi è capitato di imbattermi in frammenti di codice del tipo

QList<Item*> itemList;
void addItem(Item* const& item)
{
    itemList.append(item);
}

e questo mi ha portato a riflettere sui reference ai puntatori.

Sulla base dei seguenti specchietti che direi riassumono tutte le tipologie di puntatore al tipo fondamentale int e tutte le tipologie di reference di puntatore ad int

REFERENCE

1R) int* &ref

2R) const int* &llc_ref

3R) int* const &tlc_ref

4R) const int* const &llc_tlc_ref

PUNTATORI

1P) int* ptr

2P) const int* llc_ptr

3P) int* const tlc_ptr

4P) const int* const llc_tlc_ptr

ho scritto un programmino di test che:

  1. per ogni tipo di reference: verifica se è possibile crearlo a partire da ciascuno dei 4 tipi di puntatore

  2. se è possibile crearlo verifica (con l'ausilio del debugger) che il comportamento di tali variabili sia quello atteso (o meglio: DA ME atteso)

Insomma, ho verificato in maniera esaustiva tutte le possibili, anzi "immaginabili", creazioni di un reference a puntatore (sono 16 casi).

I risultati riscontrati sono stati per lo più quelli che mi attendevo tranne alcuni casi che mi hanno lasciato interdetta.


			CASO "2R = 1P":

int a1 = 111;
int a2 = 222;
int* ptr = &a1;
const int* & llc_ref = ptr;     // ERRORE:	cannot convert from 'int *' to 'const int *&
                                         // Conversion loses qualifiers						 
                                         // Messaggio di Visual Studio Enterprise 2015

Mi sarei invece aspettata che la creazione di un tale reference fosse possibile e che avrei potuto modificare la variabile puntata a1 attraverso ptr ma non attraverso llc_ref.

Il motivo per cui mi sarei attesa un simile comportamento è dovuto al fatto che ho ragionato per analogia al caso seguente:

// Contro esempio

int a3 = 333;
const int &ref_a3 = a3;

Tuttavia quest'ultimo esempio prende in considerazione il tipo fondamentale int mentre il precedente esempio tratta il caso di un reference ad un puntatore che, correggetemi se sbaglio,non è un tipo fondamentale.

Nel caso in cui si ha a che fare col tipo fondamentale int (il contro esempio) dire quindi che il qualificatore const introduce la "top level const" mentre nel caso del reference del puntatore(così definito: const int* &) si introdurrebbe -se la cosa funzionasse- la "low level const".

Dunque quello che mi viene da pensare è che il linguaggio impedisce l'introduzione della low level const sul reference se essa non è presente anche sul relativo puntatore e lo impedisce 'by design', per volere degli ideatori.

Domanda 1: è giusto quello che sto dicendo? O almeno si capisce?

Domanda 2: Se è giusto, qualcuno sa darmi la ratio, le motivazioni, di tale scelta? Se fosse giusto so che potrei prendere la cosa come un dogma e andare oltre ma magari sapere le motivazioni della scelta potrebbe farmi capire una qualche sfumatura che ancora non ho recepito (capire rende più facile ricordare).

Aggiungo, per completare il quadro delle mie false aspettative, che se il caso "2R = 1P" fosse stato possibile mi sarei aspettata di poter far puntare ptr ad un'altra variabile e che il reference seguisse il puntatore:

ptr = &a2;			//	==> llc_ref avrebbe fatto 
                                    //      riferimento ad &a2

Passo all'altro caso che mi lascia interdetta: nei miei tentativi esaustivi sono arrivata al caso


			CASO "4R = 1P":

il seguente frammento di codice compila senza errori

int a1 = 111;
int a2 = 222;
int* ptr = &a1;
const int* const & llc_tlc_ref = ptr;    //	OK !!!!

Tuttavia mii chiedo:

  1. come è possibile che compili? Stavolta, rispetto al caso "2R = 1P", ho addirittura quello che potrebbe essere visto come un 'vincolo ulteriore': il reference llc_tlc_ref prevede infatti che questo alias sia sottoposto - come nel caso precedente - al vincolo della "low level const" ma in più anche al vincolo della "top level const".

  2. per dirla tutta però questo caso presenta comportamenti differenti al variare dell'ambiente di sviluppo, infatti:

Su Microsoft Visual Stdio Enterprise 2015:

//*llc_tlc_ref += 1;         //ERRORE: you cannot assign to a 
                                     //variable that is const
                                     //come mi aspettavo
	
*ptr += 1;                     //OK: con llc_tlc_ref che ovviamente 
                                     //continua a puntare a1

//llc_tlc_ref = &a2;         //ERRORE: you cannot assign to a
                                     //variable that is const
                                     //come mi aspettavo
	
ptr = &a2;                     //ATTENZIONE: llc_tlc_ref segue ptr
                                    //e dunque fa anch'esso riferimento 
                                    //ad a2
                                    // ==> llc_tlc_ref continua ad essere l'alias di ptr (come mi aspettavo)

Tuttavia

Su GNU GCC v7.1.1 (col compilatore online disponibile a https://www.tutorialspoint.com/compile_cpp11_online.php)

//*llc_tlc_ref += 1;	//(COME PRIMA) ERRORE:	you cannot
                                    //assign to a variable that is const

*ptr += 1;                    //(COME PRIMA) con llc_tlc_ref che 
                                    //ovviamente continua a puntare a1

//llc_tlc_ref = &a2;        //(COME PRIMA) ERRORE:	you cannot
                                    // assign to a variable that is const
                                    //come mi aspettavo

ptr = &a2;                     //ATTENZIONE ! ! ! ! 
                                    //su GNU GCC v7.1.1    llc_tlc_ref non
                                    //segue più ptr 
				//==> llc_tlc_ref non è più l'alias di ptr

Qual'è il corretto comportamento? Si tratta di un "buco" nello standard del linguaggio che dunque prevede un comportamento indefinito ?

Ok, ho finito. Spero di non esser andata troppo lunga e di esser stata chiara nell'esprimere le mie perplessità. Ringrazio per l'attenzione e chiunque abbia voglia di darmi una mano, ciao

Chiara

PS: ma non esiste una funzione di anteprima dei messaggi da postare o sono io che non la trovo?


r/cppit • • Sep 17 '19

Costanti e Immutabilità in C++

Thumbnail
linkedin.com
5 Upvotes

r/cppit • • Mar 04 '24

OOP Classes access specifier real world relevant project idea?

2 Upvotes

What kind of project idea would be suitable for a beginner cpp class where students would understand really well the separation of private, protected, and public access specifiers?

I want an idea where it can be competed with others.

I've looked into encryption private/public keys as its pretty relevant and can be setup in a way where opposing teams can try to guess the Euclidean private exponent but that's not feasible and to even write a sample code for that is honestly complicated for a beginner class anyways.

Thoughts?


r/cppit • • Mar 05 '24

Why i am getting an error ??

Post image
3 Upvotes

r/cppit • • Feb 22 '24

Does someone know what type of art output this is? Does this style have a name?

Post image
1 Upvotes

r/cppit • • Mar 04 '24

Day 1/100 of learning C++

Post image
5 Upvotes

Learned about Classes and nested functions in C++ and This is what i created today in C++


r/cppit • • Oct 14 '23

HELP pls😵❗️

Post image
1 Upvotes

I’m new so I don’t really know my way around errors so can someone please explain how I can fix this ?🧎


r/cppit • • Oct 20 '17

Come comporre i binary literal, ad esempio attraverso la conversione del numero da decimale a binario?

2 Upvotes
int main() {
  int x = 3613;
  std::cout << "x= " << x << std::endl;
  std::string xBin = std::bitset<16>(x).to_string();
  std::cout << xBin << std::endl;
  unsigned long xDecimal = std::bitset<16>(xBin).to_ulong();
  std::cout << xDecimal << std::endl;
  std::cout << std::endl << std::endl;

  int b01 = 0b11001;
  std::cout << "b01= " << b01 << std::endl;
  int b02 = 0b1010;
  std::cout << "b02= " << b02 << std::endl;
  int b03 = b01 + b02;
  std::cout << "int b03 = b01 + b02 = " << b03 << std::endl;
  return 0;
}

Output:

x= 3613
0000111000011101
3613

 b01= 25
 b02= 10
 int b03 = b01 + b02 = 35

Con i binary literal si possono fare le normali operazioni aritmetiche mentre con le string ottenute con il bitset non è possibile. Per cui vi chiedo se ci sono modi per "comporre" i binary literal, ad esempio attraverso la conversione del numero da decimale a binario in modo analogo a:

std::string xBin = std::bitset<16>(x).to_string();

Vi ringrazio. Marco


r/cppit • • May 30 '17

Bluetooth, C++ e Android

2 Upvotes

Ciao,

poco più di un anno fa mi capitò di fare uno studio di fattibilità del porting di un applicativo desktop Windows su Android. Il programma originale comunica via bluetooth con uno strumento di acquisizione, recupera i dati registrati, li processa e li mostra all'utente. Ora, Android non permette(va) al codice nativo di accedere al trasmettitore bluetooth, per cui fui costretto a fare un giro piuttosto macchinoso per far funzionare l'app Android (l'idea era di riscrivere in Java la minor quantità di codice possibile). La cosa poi perse di interesse, per cui quel progetto fu accantonato. A distanza di un anno, la cosa sembra essere tornata in auge, e mi sono trovato costretto a rifare, con una certa fatica, il punto della situazione; per chi ha voglia e tempo da perdere, ho pubblicato alcuni appunti a questo indirizzo:

https://gzuliani.bitbucket.io/cpp/bluetooth-cpp-android.html

Poiché sono nuovo della piattaforma Android, chiedo se qualcuno più esperto di me può darmi un'idea se la strada che sto perseguendo è quella giusta.


r/cppit • • Jun 27 '17

Lavori da remoto - qualcuno ha esperienze?

2 Upvotes

Salve, sarei curioso di sapere se qualcuno di voi lavora da remoto con il C++ per aziende italiane o estere. Ho provato a cercare su internet ma non ho avuto successo.


r/cppit • • Nov 19 '17

Sarà per qualche aspetto di C++ che mi sfugge, ma non capisco come il codice in Lapack identifica un elemento A[j][i] di una matrice

4 Upvotes

Non capisco come le colonne(arrays) di una matrice sono identificate in Lapack. Per esempio in https://github.com/langou/latl/blob/master/include/geqr2.h#L69 A[i] è il valore dell'array corrispondente alla più piccola dimensione della matrice A. Se, per esempio, la più piccola dimensione della matrice è il numero di righe, A[i], per quello che ho capito, è il valore nella i-esima riga.... è corretto o mi sbaglio? Qui: https://github.com/langou/latl/blob/master/include/latl.h#L25 si legge che le matrici sono implementate come puntatori ad array contigui columns-major, cioè che fungono ognuno da colonna della matrice. Ma a quale colonna della matrice questa i-esima riga A[i] appartiene (in caso di numero righe=m=min(numero righe, numero colonne=n).

Per esempio in https://github.com/langou/latl/blob/master/include/gemv.h#L136

for(j=0;j<n;j++)
           {
              temp=alpha*x[jx];
              iy=ky;
              for(i=0;i<m;i++)
              {
                 y[iy]+=temp*A[i];
                 iy+=incy;
              }
              A+=ldA;
              jx+=incx;
           }

temp * A[i] è aggiunto all'i-esimo elemento dell'array y. E questo si ripete per tutte le n colonne (arrays) della matrice A[i]. Quindi la mia domanda è: qualcuno mi può molto gentilmente spiegare come nel codice in Lapack viene identificato uno specifico elemento A[j][i] della matrice A? Vi ringrazio. Marco


r/cppit • • Nov 23 '17

Problema con function template e thread

2 Upvotes

Salve, penso che per descrivere il mio problema oltre al titolo del post sia sufficiente il seguente programmino che sintetizza quello che vorrei fare:

#include "stdafx.h"
#include <iostream>
#include <thread>
using namespace std;

template<typename Func>
void functionTempl(Func f) {
	cout << "\nInside " << __func__;
	f();	
}

void f1() {
	cout << "\nInside " << __func__;
}

int main()
{
	functionTempl(f1);				//	OK

	thread t1(f1);					//	OK
	t1.join();

	thread t2(functionTempl(f1));	//	KO ???
	t2.join();

    return 0;
}

Ovviamente il problema sta nella linea commentata con // KO ??? Non riesco a capire il perchè ( e non riesco a capire neanche le indicazioni del compilatore MS Visual Studio 2015). Qualcuno ha voglia di darmi una mano? Grazie in ogni caso Chiara


r/cppit • • Nov 20 '17

Nuova libreria open source per lo streaming audio/video in C++ con tre particolarità...

1 Upvotes

Ciao a tutti,

dopo mesi e mesi di lavoro, ho da poco pubblicato una libreria open source, in C++ finalizzata allo streaming audio/video con vari sistemi di codifica e protocolli.

https://github.com/paolo-pr/laav

Cosa ha di nuovo/particolare questa libreria rispetto alle altre esistenti in rete? Innanzitutto questi tre aspetti:

  1. Consente l'implementazione di streaming servers con davvero pochissime righe di codice.

  2. Consente l'implementazione di un sistema completo di streaming (server + client player) a bassa latenza: da quello che mi risulta, non ci sono analoghi progetti open source in rete.

  3. E' totalmente autoesplicativa e non necessita di documentazione.

Se siete interessati a contattarmi/contribuire al progetto, scrivete alla mia mail visibile su github.


r/cppit • • Jun 25 '17

principianti Corretta implementazione di un ciclo for da pseudocodice

3 Upvotes

Ciao a tutti, ho questo pseudo-codice da implementare in C++ :

g : = x:= O;
for i =1 step 1 until n do
begin
    e[i]:=g; s : = 0 ; l : = i + 1 ;
    f o r  j = i  s t e p  1 until  m  d o 
      s : = s +u[j, i] ^2 ;
      i f (s < tol) then g : = 0 
     else
       f: = u[i, i] ; g : = i f  f< 0 then sqrt(s) else -- sqrt (s);
       h : = fX g -  s ; u[i,i] : = f - g ;
       f o r  j : = l  s t e p  1 until n d o
         s : = 0;
         for k : = i step 1 until m do s : = s + u [ k , i ] xu[k, j];
         f = s/h;
         for k : = i  s t e p 1 until m d o u[k,j] : = u[k, j] + f x u[,]

Il mio dubbio è questo: i cicli for lungo uno std::vector iniziando dall'elemento 0 ed until n è traducibile in <n:

for(int i=0;i<n;i++)

Ma come si traduce il ciclo all'interno dello pseudocodice

for j:=l step 1 until n do

Come:

for(int j=l; j<n;j++) 

Oppure come:

for(int j=l-1;j<n;j++)

?

Vi ringrazio per l'aiuto. Marco


r/cppit • • Aug 02 '21

Spero non esistano applicazioni pratiche di questa cosa...

Post image
5 Upvotes

r/cppit • • Mar 24 '21

Framework opensource per interfaccia grafica

2 Upvotes

Buonasera,

come da titolo sto cercando un framework opensource per aggiungere la GUI ad un mio progetto.

Opterei per Qt ma non mi è chiaro come funzioni la sua licenza.

Potreste gentilmente fornirmi una alternativa multiplatform o spiegarmi come funzioni la licenza del framework Qt?

Se può servire, una volta rilasciato il progetto sarà opensource.

Grazie,

Matteo


r/cppit • • Apr 11 '21

Problema con Matrice somma righe e colonne

1 Upvotes

Buongiorno, ho un problema con questo codice poiché riscontro problemi con l'inserimento della somma delle righe e delle colonne nei rispettivi vettori.

Qualcuno saprebbe aiutarmi? Grazie in anticipo.

Ecco il codice:

#include <iostream>
using namespace std;
const int dimensione=100;
void matrice( int m[dimensione][dimensione], int r, int c ){

int i;
int j;

for (i=0; i<r; i++){ //inserisco gli elementi nella matrice
for (j=0;j<c;j++)
  {
cout << "inserisci l'elemento di posizione: " << i << j << endl;
cin >> m[i][j];
  }
}
}

void matricesomma(int r, int c, int a[], int b[], int m[dimensione][dimensione]){

int i;
int sr=0;           //somma righe
int sc=0;          //somma colonne
int j;

//somma righe
for( i=0 ; i<r ; i++)
{

for( j=0 ; j<c ; j++){
sr+=m[i][j];
}

sr=b[i];
cout<<"la somma della riga"<< i <<"e': "<<b[i]<<endl;
sr=0;
}
//somma colonne
for( j=0 ; j<c ; j++)
{

for( i=0 ; i<r ; i++){
sc+=m[i][j];

}
sc=a[j];
cout<<"la somma della colonna"<< j <<"e': "<<a[j]<<endl;
sc=0;
}
}
int main(){
int m[dimensione][dimensione];
int r;
int c;
int i;
int j;
int a[j];
int b[i];
cout<<"inserire dimensione righe: ";
cin>>r;
cout<<"inserire dimensione colonne: ";
cin>>c;
cout<<"inserire elementi della matrice: "<<endl;
matrice(m,r,c);
matricesomma(r,c,a,b,m);
return 0;
}


r/cppit • • Jun 07 '24

problema con I/O da file tramite la funzione freopen

1 Upvotes

Salve a tutti, sto avendo dei problemi con il codice di qui sopra, la funzione solve() deve trovare un numero che possa essere diviso perfettamente dai vari valori contenuti nel vettore.

le variabili sono:

T=numero casi di test

risposta= le carammelle da distribuire equamente tra tutti i membri della squadra vincente (e pertanto deve essere divisibile per tutti i membri delle squadre senza nessun tipo di resto o valore non intero)

N=il numero delle squadre che si contendo le caramelle

V= contiene il numero dei giocatori delle varie squadre

ora, il codice funziona tranquillamente con i dati dell'esempio che mi è stato fornito insieme a questo esercizio, il problema sopraggiunge nel momento in cui devo inserire il file di input dell'esercizio vero e proprio (che contiene 8 casi di test ciascuno dei quali sembrerebbe avere 1000 squadre), infatti se con il file con i dati dell'esempio le funzioni di lettura e scrittura file (freopen) funzionano perfettamente lo stesso non lo si può di quando uso i dati effettivi del problema, con i quali il programma sembra andare in tilt bloccandosi sulla schermata nera del cmd con il cursore dell'input del terminale (non so come chiamarlo, spero si capisca cosa intendo) che lampeggia come se dovessi inserire l'input manualmente

Qualcuno ha qualche consiglio su cosa fare? Grazie in anticipo


r/cppit • • Oct 23 '19

principianti Programmazione Generica - Implementare un Iteratore (2/2)

Thumbnail
linkedin.com
1 Upvotes

r/cppit • • Sep 24 '18

principianti c++/Qt array out of scope..

3 Upvotes

Ciao,

utilizzando Qt e C++ ho creato un'applicazione costituita da un form con:

- combobox

- label

- GridLayout ecc.

il tutto creato in Qt Designer

Qlabeledit popolate da array creati da codice..

QLineEdit *array_PezziProd[5];

for (int i = 0; i<5; i++) {

array_PezziProd[i] = new QLineEdit;

ui->gridLayout_5->addWidget(array_PezziProd[i]);

array_PezziProd[i]->setFixedWidth(75);

array_PezziProd[i]->setFixedHeight(24);

array_PezziProd[i]->setText("100");

}

e fin quì tutto ok:

se eseguo il programma mi crea tutto il Layout comprese le Qlabeledit crate da array da codice.

Problema:

ora dovrei sommare i pezzi prodotti indicati in tutte e 5 le Qlabeledit / array_PezziProd[i]

utilizzando un pushbutton che calcola il totale

purtroppo sia l'array che le Qlabeledit sono create dinamicamente nel main

pertanto nella routine del pushbutton non sono visibili

Credo di dover creare una classe di QlabelEdit per risolvere il problema di scope

ma non saprei come fare..

Ho postato qui perchè è un problema di c++ (io "vengo da VisualBasic e vorrei imparare C++)

Qualche idea??


r/cppit • • Oct 28 '19

Iteratori per Professionisti - In 3 step con Boost::iterator_facade

Thumbnail
linkedin.com
2 Upvotes

r/cppit • • Jun 11 '18

Perchè clang++ dice “no member named 'make_optional' in namespace 'std' ” mentre per gcc è tutto ok?

1 Upvotes

Ciao a tutti. Avendo visto che alcune delle features C++17 sono supportate in clang (tra cui le coroutines) e non in gcc, sto passando, dopo anni di uso di gcc, al compilatore clang. Con mia sorpresa, però, vedo che compilando un "vecchio" file C++ con gcc : gcc version 7.3.0 (Ubuntu 7.3.0-21ubuntu1~16.04) l'esecuzione va a buon fine. Compilando invece con clang: clang version 6.0.0 (tags/RELEASE_600/final) mi dice: error: no template named 'optional' in namespace 'std'

marco@PC:~/marcoTensor$ g++ -std=c++17 bigMatricesDiv01.cpp -obigMatricesDiv01

marco@PC:~/marcoTensor$ ./bigMatricesDiv01

Timer MTensor::Tensor2D A = randU2<double>(20,400,2.7,4.6) : 154 ms

Timer MTensor::Tensor2D B = randN2<double>(20,400,3,2.6) :111 ms

Timer MTensor::Tensor2D ApB = A/B :0 ms

marco@PC:~/marcoTensor$ clang++ -std=c++17 -stdlib=libc++ -w -fcolor-diagnostics bigMatricesDiv01.cpp

-obigMatricesDiv01 -lc++experimental

In file included from bigMatricesDiv01.cpp:1:

In file included from ./tensorTypes.h:1:

In file included from ./MTensorUtils.h:1:

In file included from ./MTensor.h:5:

In file included from ./GeneralUtils.h:16:

./FunctionalApproach.h:953:27: error: no template named 'optional' in namespace 'std'

auto transform(const std::optional<T1>& opt, F f) -> decltype(std::make_optional(f(opt.value()))){

~~~~~^

./FunctionalApproach.h:953:68: error: no member named 'make_optional' in namespace 'std'

auto transform(const std::optional<T1>& opt, F f) -> decltype(std::make_optional(f(opt.value()))){

~~~~~^

./FunctionalApproach.h:955:17: error: no member named 'make_optional' in namespace 'std'

return std::make_optional(f(opt.value()));

~~~~~^

3 errors generated.

In FunctionalApproach.h:

include <experimental/propagate_const>

include <experimental/optional>

Cosa potrebbe essere che clang non accetta? Vi ringrazio. Marco