• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jednak nie umiem stosowac podejscia obiektowego.

Cloud VPS
0 głosów
308 wizyt
pytanie zadane 20 lutego 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)

Czesc, dalej bawie sie z pqxx (bilioteka postgresql pod c++) i napotkalem pewien problem otoz jak dzialaja zmienne lokalne w metodach klasy i czy da sie taka zmienna wyciagnac. Wytlumacze problem. 

Mam jedna metode klasy w ktorej robie cos takiego.       connection C("dbname="+dbname+" user="+user+" password="+password+" hostaddr="+hostaddr+" port="+port);

A w drugiej metodzie potrzebuje sie odwolac do obiektu C w taki sposob     work W(C);

ale dostaje C was not declared in this scope. 

Teraz wrzucam prototyp tej klasy 

#ifndef TABELASQL_HPP_INCLUDED
#define TABELASQL_HPP_INCLUDED

#include <pqxx/pqxx>
#include <array>
#include <vector>
#include <iostream>
#include <string>

using namespace std;
using namespace pqxx;

class TabelaPostgre;

class TabelaPostgre
{
public:
    connection C;
    string name;
    public:
        template<typename T,typename... Rest> void create(T& x, Rest... rest);
        void connect_2_db();
        template<typename T,typename... Rest> void INSERT(T& x, Rest... rest);
        template<typename T,typename... Rest> void SELECT(T& x, Rest... rest);
        void DELETE();

};

#endif // TABELASQL_HPP_INCLUDED

Nadal nie dziala a to pewnie dlatego ze zle sie odnosze do szablonu funkcji w pliku cpp ale teoretyzuje bo kompilator mi tam wywala blad.

Prosilbym o wyjasnienie i wytlumaczenie bledu. 

PS: Nie chcialbym zasmiecac main'a i innych metod klasy kolejnymi obiektami kiedy mam je juz w jednej funkcji ale lokalnie. Globalnie nie dziala :(

Pozdrawiam wiem ze podalem nie za duzo informacji wiec jakby cos to pisac.

2 odpowiedzi

+1 głos
odpowiedź 20 lutego 2016 przez criss Mędrzec (172,570 p.)
wybrane 22 lutego 2016 przez 0xf
 
Najlepsza

Po pierwsze: nie używaj using namespace w plikach *.h/*.hpp, bo wtedy przy kompilacji używanie namespace-u staje się aktywne dla całego projektu, a to może powodować dziwne, trudne do znalezienia błędy. Jeśli już musisz, to w klamrach (np. wewnątrz klasy), ale najlepszym wyjściem jest po prostu pisanie pełnej nazwy typu razem z namespace-m.

Po drugie: tak jak pisze Patrycjesz. Definicje szablonów powinny być w pliku *.h. Co prawda nie jest to konieczność, bo da się to obejść, ale to jest najprostsze wyjście. Poczytaj: https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl
To nie jest konkretnie o metodach, ale zasada ta sama.

Wtedy już wszystko powinno działać.

+1 głos
odpowiedź 20 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)
A gdzie masz definicje szablonów? Przecież ci już pisałem, że muszą być w definicji klasy...

Podobne pytania

0 głosów
1 odpowiedź 235 wizyt
0 głosów
2 odpowiedzi 246 wizyt
pytanie zadane 9 października 2019 w C i C++ przez torelq Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 718 wizyt

93,481 zapytań

142,414 odpowiedzi

322,758 komentarzy

62,894 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...