Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

expected unqualified-id before string constant

I'm currently writing a C++ application which implements an Oscillator in conjuction with math.h. The code I have should work fine for the application (trying to compile an object file), bu I'm getting a compiler error most likely having to do with syntax/etc; I think it has something to do with namespace. The error:

Terminal Output:

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; } 

Oscillators.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 

I've seen other suggestions that mention using g++ -Wall -g but I'm not sure that that is the problem, and that there is something else going on here.

Any help would be much appreciated! Thanks!!

like image 905
DanMoore Avatar asked Aug 06 '12 22:08

DanMoore


1 Answers

This is a simple problem.

You just forgot the semi colon at the end of your header file.

The compiler errors you get for missing the semi colon at the end of a class definition are very hard to relate to the actual problem - just get in the habit of checking that when you get errors after you create a class.

like image 146
John Humphreys Avatar answered Sep 29 '22 20:09

John Humphreys