GNU/Linux >> LINUX-Kenntnisse >  >> Linux

erwarteter Bezeichner vor String-Konstante

Es gibt einen anderen und einfacheren Weg, das zu tun, was Sie wollen:Ändern Sie einfach Ihre Aussage von test tst_("Hi"); bis test tst_{"Hi"}; und es wird funktionieren. Unten ist der modifizierte Code und er funktioniert wie erwartet.

#include <iostream>
#include <string>
using namespace std;
class test
{
public:
    test(std::string s):str(s){cout<<"str is: "<<s;}
private:
    std::string str;
};

class test1
{
public:
    test tst_{"Hi"};
};

int main()
{   test1 obj;
    return 0;
}

Beachten Sie, dass ich gerade test tst_("Hi"); geändert habe bis test tst_{"Hi"}; und alles andere ist genau gleich. Nur zur Bestätigung, dass dies funktioniert, habe ich einen Cout hinzugefügt, um zu überprüfen, ob die str-Variable korrekt initialisiert wird. Ich denke, diese einzeilige Lösung ist eleganter (zumindest für mich) und auf dem neuesten Stand des neuen Standards.


Sie können tst_ nicht initialisieren wo Sie es deklarieren. Dies ist nur für static const möglich primitive Typen. Stattdessen benötigen Sie einen Konstruktor für class test1 .

BEARBEITEN:Unten sehen Sie ein funktionierendes Beispiel, das ich in ideone.com gemacht habe. Beachten Sie einige Änderungen, die ich vorgenommen habe. Erstens ist es besser, den Konstruktor von test zu haben nimm eine const Verweis auf string Kopieren zu vermeiden. Zweitens, wenn das Programm erfolgreich ist, sollten Sie return 0 nicht 1 (mit return 1 Sie erhalten einen Laufzeitfehler in ideone).

#include <iostream>
#include <string>
using namespace std;
class test
{
public:
    test(const std::string& s):str(s){};
private:
    std::string str;
};
 
class test1
{
public:
    test1() : tst_("Hi") {}
    test tst_;
};
 
int main()
{
    return 0;
}

Linux
  1. Gibt nur die übereinstimmende Zeichenfolge in Sed zurück?

  2. Testen Sie das rekursive Suchen und Ersetzen von Sed vor dem Ausführen?

  3. So testen Sie ein PHP-Skript

  4. in_addr_t zu Zeichenfolge

  5. Testen Sie, ob die Zeichenfolge in Bash keine Leerzeichen enthält

Bash Strings verketten

Ersetzen von Zeichenfolgen in Bash

Bash-Scripting – String-Manipulation

So suchen und ersetzen Sie Text, Wort oder Zeichenfolge in einer Datei

Testen Sie einen wöchentlichen Cronjob

Gibt es einen Unterschied zwischen dem Negieren vor/nach einem Testbefehl?