attendu unqualified-id avant une constante de chaîne
Je suis actuellement à la rédaction d'une application C++ qui met en œuvre un Oscillateur en conjonction avec les mathématiques.h. Le code que j'ai doit fonctionner correctement pour l'application (en essayant de compiler un fichier de l'objet), mais j'obtiens une erreur du compilateur le plus susceptible d'avoir à faire avec la syntaxe de/etc; je pense qu'il a quelque chose à voir avec l'espace de noms. L'erreur:
Terminal De Sortie:
User-Name-Macbook-Pro:Synth Parts UserName$ make
g++ -o Oscillators.o -c -I. Oscillators.cpp -c
In file included from Oscillators.cpp:2:
/usr/include/math.h:41: error: expected unqualified-id before string constant
In file included from /usr/include/c++/4.2.1/bits/locale_facets.tcc:42,
from /usr/include/c++/4.2.1/locale:46,
from /usr/include/c++/4.2.1/bits/ostream.tcc:46,
from /usr/include/c++/4.2.1/ostream:635,
from /usr/include/c++/4.2.1/iostream:45,
from Oscillators.cpp:4:
/usr/include/c++/4.2.1/typeinfo:41: error: expected declaration before end of line
make: *** [Oscillators.o] Error 1
Oscillators.cpp
#include "Oscillators.h"
#include <math.h>
#include <vector>
#include <iostream>
#define TWOPI (6.2831853072)
using namespace std;
oscillator(int srate = 44100, int tabsize = 8192, double freq = 200) //Default to output 200Hz Sine Wave
{
if(srate <= 0) {
cout << "Error: sample rate must be positive" << endl;
return;
}
sizeovrsr_ = (double)tabsize / (double)srate
if(freq < 20 || freq > 20000) {
cout << "Error: frequency is out of audible range" << endl;
return;
}
curfreq_ = freq;
curphase_ = 0.0 //Not out of one, out of tabsize
incr_ = curfreq * sizeovrsr_;
for(int i = 0; i < tabsize; i++) {
gtable.push_back(sin((i*TWOPI)/(double)tabsize));
}
gtable.push_back(gtable[0]);
}
void print_table()
{
vector<double>::size_type i;
for(i = 0; i < gtable.size(); i++)
cout << gtable[i] << "\n";
cout << endl;
}
Oscillateurs.h
#ifndef GUARD_OSCILLATORS_H
#define GUARD_OSCILLATORS_H
#include <vector>
class oscillator {
public:
/*
void fill_sine(); //Will change the table to a sine wave
void fill_square(); //Will change the table to a square wave
void fill_sawtooth(); //Will change the table to a sawtooth wave
void fill_triangle(); //Will change the table to a triangle wave
double tick(double freq); //Will output the current sample and update the phase
*/
void print_table(); //Will print all table values to standard output
oscillator(int srate = 44100, double freq = 200, int tabsize = 8192);
private:
double sizeovrsr_; //Will be set at initialization and will determine phase increase for tick func
double curphase_;
double curfreq_; //if the freq sent to a tick function doesn't match the current tick, it will be reset;
double incr_;
std::vector<double> gtable_; //Will contain a wavetable with a guard point.
}
#endif
J'ai vu d'autres suggestions qui mentionnent l'utilisation du g++ -Wall -g, mais je ne suis pas sûr que c'est bien le problème, et qu'il y a autre chose qui se passe ici.
Toute aide serait grandement appréciée! Merci!!
source d'informationauteur DanMoore
Vous devez vous connecter pour publier un commentaire.
C'est un problème simple.
Vous avez juste oublié le point virgule à la fin de votre fichier d'en-tête.
Les erreurs du compilateur que vous obtenez pour manque le point virgule à la fin d'une définition de classe sont très mal à comprendre le problème - il suffit de prendre l'habitude de vérifier que, lorsque vous obtenez des erreurs après que vous créez une classe.
Une autre façon de produire cette erreur: définir une macro à une constante de chaîne, et, plus tard, d'utiliser le nom de la macro comme le nom d'une constante chaîne. Exemple
La réponse la plus évidente est de supprimer l'une des définitions, ou de changer le nom de l'un.
Votre code a plusieurs problèmes:
void oscillators::print_table()
au lieu de simplementvoid print_table()
) oscillators.cpp#include "oscillators.h"
en oscillators.cppMais je suppose que d'erreur spécifique est causée par le manque de point-virgule après la définition de la classe dans le fichier d'en-tête. Il suffit de l'ajouter comme: