Error: expected constructor, destructor, or type conversion before ';' token

  • Thread starter Thread starter creativen
  • Start date Start date
  • Tags Tags
    Error Type
Click For Summary

Discussion Overview

The discussion revolves around a compilation error encountered in a C programming project related to Arduino. Participants are examining the specific error messages and the code structure to identify potential issues in the code that prevent successful compilation.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant notes multiple error messages, including issues with expected tokens and variable declarations, suggesting that there may be syntax errors in the code.
  • Another participant points out that the function 'sendSerialDatainitial' lacks a return type, which could be causing the compilation error regarding the expected constructor.
  • Some participants propose that the use of 'const' for certain variables may lead to issues if they are being modified later in the code.
  • There is a mention of potential problems with the way variables are being assigned and used, particularly with the 'g_pinCommLatch' variables being assigned values incorrectly.
  • One participant highlights that the use of 'GoSub' may not be appropriate in C programming, suggesting that this could lead to further complications in the code structure.
  • Another participant raises concerns about the use of undeclared variables, such as 'registerCount1', 'registerCount2', and 'registerCount3', which may lead to additional compilation errors.

Areas of Agreement / Disagreement

Participants express various viewpoints regarding the source of the compilation errors, with no clear consensus on the specific issues or solutions. Multiple competing views regarding syntax and variable usage remain unresolved.

Contextual Notes

There are indications of missing declarations and potential misuse of variable types, which may contribute to the errors. The discussion does not resolve these issues but highlights areas of uncertainty.

creativen
Messages
21
Reaction score
0
I'm newbie in C programming...
i'm trying to make my arduino board works but still find error when compiling the C programming, the errors are:

driving7segmentusingmultipleshiftregisters3:2: error: expected constructor, destructor, or type conversion before ';' token
driving7segmentusingmultipleshiftregisters3:85: error: ISO C++ forbids declaration of 'sendSerialDatainitial' with no type
driving7segmentusingmultipleshiftregisters3.cpp: In function 'int sendSerialDatainitial()':
driving7segmentusingmultipleshiftregisters3:95: error: assignment of read-only variable 'g_pinCommLatch1'
driving7segmentusingmultipleshiftregisters3:96: error: expected `;' before 'g_pinCommLatch2'
driving7segmentusingmultipleshiftregisters3:99: error: expected `;' before ')' token
driving7segmentusingmultipleshiftregisters:127: error: expected `}' at end of input


Code:
sendSerialDataInitial (void);
void setup();

int switchPin1 = A0;
int switchPin2 = A2;
int switchPin3 = A4;
int resetPin1  = A1;
int resetPin2  = A3;
int resetPin3  = A5;
int no1=1;
int no2=1;
int no3=1;

// This pin gets sets low when I want the 595s to listen
const int  g_pinCommLatch1 = 5;
const int  g_pinCommLatch2 = 6;
const int  g_pinCommLatch3 = 7;

// This pin is used to pass the next bit
const int  g_pinData1    = 8;
const int  g_pinData2    = 9;
const int  g_pinData3    = 10;

// This pin is used by ShiftOut to toggle to say there's another bit to shift
const int  g_pinClock1     = 11;
const int  g_pinClock2     = 12;
const int  g_pinClock3     = 13;

// Definitions of the 7-bit values for displaying digits
byte g_digits [10];

// Current number being displayed
int g_numberToDisplay1 = 0;
int g_numberToDisplay2 = 0;
int g_numberToDisplay3 = 0;

// Number of shift registers in use
const int g_registers = 5;

// Array of numbers to pass to shift registers
byte g_registerArray [g_registers];

byte *pValueArray1;
byte *pValueArray2;
byte *pValueArray3;
byte reg1;
byte reg2;
byte reg3;
byte value1;
byte value2;
byte value3;
byte bitMask1;
byte bitMask2;
byte bitMask3;



void setup()
{
  pinMode (g_pinCommLatch1, OUTPUT);
  pinMode (g_pinCommLatch2, OUTPUT);
  pinMode (g_pinCommLatch3, OUTPUT);
  pinMode (g_pinClock1, OUTPUT);
  pinMode (g_pinClock2, OUTPUT);
  pinMode (g_pinClock3, OUTPUT);
  pinMode (g_pinData1, OUTPUT);
  pinMode (g_pinData2, OUTPUT);
  pinMode (g_pinData3, OUTPUT);
  
  // Setup the digits array
  g_digits [0] = 1 + 2 + 4 + 8 + 16 + 32 + 00;
  g_digits [1] = 0 + 2 + 4 + 0 + 00 + 00 + 00;
  g_digits [2] = 1 + 2 + 0 + 8 + 16 + 00 + 64;
  g_digits [3] = 1 + 2 + 4 + 8 + 00 + 00 + 64;         
  g_digits [4] = 0 + 2 + 4 + 0 + 00 + 32 + 64;              
  g_digits [5] = 1 + 0 + 4 + 8 + 00 + 32 + 64;         
  g_digits [6] = 1 + 0 + 4 + 8 + 16 + 32 + 64;
  g_digits [7] = 1 + 2 + 4 + 0 + 00 + 00 + 00;                   
  g_digits [8] = 1 + 2 + 4 + 8 + 16 + 32 + 64;
  g_digits [9] = 1 + 2 + 4 + 8 + 00 + 32 + 64;     
  
 }

sendSerialDatainitial(void)
  {  g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [0] = g_digits [0];
   
      
  // Signal to the 595s to listen for data
  digitalWrite (g_pinCommLatch1,LOW);
  g_pinCommLatch1=LOW
  g_pinCommLatch2=LOW
  g_pinCommLatch3=LOW
  
  for (reg1 = registerCount1; reg1 > 0; reg1--)
  {
    byte value1 = pValueArray1 [reg1-1];

    for (byte bitMask1 = 128; bitMask1 > 0; bitMask1 >>= 1)
    {
      digitalWrite (g_pinClock1, LOW);
    
      digitalWrite (g_pinData1, value1 & bitMask1 ? HIGH : LOW);
        
      digitalWrite (g_pinClock1, HIGH);
    }
  }
  
  for (byte reg2 = registerCount2; reg2 > 0; reg2--)
  {
    byte value2 = pValueArray2 [reg2-1];

    for (byte bitMask2 = 128; bitMask2 > 0; bitMask2 >>= 1)
    {
      digitalWrite (g_pinClock2, LOW);
    
      digitalWrite (g_pinData2, value2 & bitMask2 ? HIGH : LOW);
        
      digitalWrite (g_pinClock2, HIGH);
    }
  }
  
  for (byte reg3 = registerCount3; reg3 > 0; reg3--)
  {
    byte value3 = pValueArray3 [reg3-1];

    for (byte bitMask3 = 128; bitMask3 > 0; bitMask3 >>= 1)
    {
      digitalWrite (g_pinClock3, LOW);
    
      digitalWrite (g_pinData3, value3 & bitMask3 ? HIGH : LOW);
        
      digitalWrite (g_pinClock3, HIGH);
    }
  }
  
  // Signal to the 595s that I'm done sending
  digitalWrite (g_pinCommLatch1, HIGH);
  digitalWrite (g_pinCommLatch2, HIGH);
  digitalWrite (g_pinCommLatch3, HIGH);

  }

Tombol:
  GoSub Blinks
  
  if switchPin1=1 and a=1 then
  GoSub Counter1
  a=0
  elseif switchPin1=0 and a=0 then
  a=1
  end if

  if switchPin2=1 and b=1 then
  GoSub Counter2
  b=0
  elseif switchPin2=0 and b=0 then
  b=1
  end if
  
  if switchPin3=1 and c=1 then
  GoSub Counter3
  c=0
  elseif switchPin3=0 and c=0 then
  c=1
  end if

  if resetPin1=1 and a=1 then
  GoSub reset1
  end if

  if resetPin2=1 and a=1 then
  GoSub reset2
  end if
  
  if resetPin3=1 and a=1 then
  GoSub reset3
  end if

GoSub Show1
GoSub Show2
GoSub Show3
GoSub SendSerialData1
GoSub SendSerialData2
GoSub SendSerialData3
delay(1000
GoSub Tombol

Blinks:
  int a = random (1,3);
  int b = random (1,4);
  int c = random (1,5);
  
  if (a==3)
    digitalWrite(2, HIGH);   // set the LED on 
    end if
    
   if (b==3)
    digitalWrite(3, HIGH);   // set the LED on
    end if
  
   if (c==3)
    digitalWrite(3, HIGH);   // set the LED on
    end if
    
   return
    

Counter1:
  g_numberToDisplay1 = no1;
  no1=no1+1;
  return

Counter2:
  g_numberToDisplay2 = no2;
  no2=no2+1;
  return
  
Counter3:
  g_numberToDisplay3 = no3;
  no3=no3+1;
  return
  
Reset1:
  gnumberToDisplay1 = no1;
  no1=0
  return
  
Reset2:
  gnumberToDisplay2 = no2;
  no2=0
  return

Reset3:
  gnumberToDisplay3 = no3;
  no3=0
  return
   
show1:
  if (g_numberToDisplay1 < 10)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [0] = g_digits [g_numberToDisplay1];
  }
  else if (g_numberToDisplay1 < 100)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [g_numberToDisplay1 / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay1 % 10];
  }
  else if (g_numberToDisplay1 < 1000)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [g_numberToDisplay1 / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay1 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay1 % 10];
  }
  else if (g_numberToDisplay1 < 10000)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [g_numberToDisplay1 / 1000];
    g_registerArray [2] = g_digits [(g_numberToDisplay1 % 1000) / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay1 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay1 % 10];
  }
  else
  {
    g_registerArray [4] = g_digits [g_numberToDisplay1 / 10000];
    g_registerArray [3] = g_digits [(g_numberToDisplay1 % 10000) / 1000];
    g_registerArray [2] = g_digits [(g_numberToDisplay1 % 1000) / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay1 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay1 % 10];    
  }
  return
  
show2:
  if (g_numberToDisplay2 < 10)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [0] = g_digits [g_numberToDisplay2];
  }
  else if (g_numberToDisplay2 < 100)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [g_numberToDisplay2 / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay2 % 10];
  }
  else if (g_numberToDisplay2 < 1000)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [g_numberToDisplay2 / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay2 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay2 % 10];
  }
  else if (g_numberToDisplay2 < 10000)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [g_numberToDisplay2 / 1000];
    g_registerArray [2] = g_digits [(g_numberToDisplay2 % 1000) / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay2 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay2 % 10];
  }
  else
  {
    g_registerArray [4] = g_digits [g_numberToDisplay2 / 10000];
    g_registerArray [3] = g_digits [(g_numberToDisplay2 % 10000) / 1000];
    g_registerArray [2] = g_digits [(g_numberToDisplay2 % 1000) / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay2 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay2 % 10];    
  }
  return
  
show3:
  if (g_numberToDisplay3 < 10)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [0] = g_digits [g_numberToDisplay3];
  }
  else if (g_numberToDisplay3 < 100)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [1] = g_digits [g_numberToDisplay3 / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay3 % 10];
  }
  else if (g_numberToDisplay3 < 1000)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [0];
    g_registerArray [2] = g_digits [g_numberToDisplay3 / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay3 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay3 % 10];
  }
  else if (g_numberToDisplay3 < 10000)
  {
    g_registerArray [4] = g_digits [0];
    g_registerArray [3] = g_digits [g_numberToDisplay3 / 1000];
    g_registerArray [2] = g_digits [(g_numberToDisplay3 % 1000) / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay3 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay3 % 10];
  }
  else
  {
    g_registerArray [4] = g_digits [g_numberToDisplay3 / 10000];
    g_registerArray [3] = g_digits [(g_numberToDisplay3 % 10000) / 1000];
    g_registerArray [2] = g_digits [(g_numberToDisplay3 % 1000) / 100];
    g_registerArray [1] = g_digits [(g_numberToDisplay3 % 100) / 10];
    g_registerArray [0] = g_digits [g_numberToDisplay3 % 10];    
  }
  return
  
sendSerialData1:
// Signal to the 595s to listen for data
  digitalWrite (g_pinCommLatch1, LOW);
  
  for (byte reg1 = registerCount1; reg1 > 0; reg1--)
  {
    byte value1 = pValueArray1 [reg1 - 1];

    for (byte bitMask1 = 128; bitMask1 > 0; bitMask1 >>= 1)
    {
      digitalWrite (g_pinClock1, LOW);
    
      digitalWrite (g_pinData1, value1 & bitMask1 ? HIGH : LOW);
        
      digitalWrite (g_pinClock1, HIGH);
    }
  }
  // Signal to the 595s that I'm done sending
  digitalWrite (g_pinCommLatch1, HIGH);
return

sendSerialData2:
// Signal to the 595s to listen for data
  digitalWrite (g_pinCommLatch2, LOW);
  
  for (byte reg2 = registerCount2; reg2 > 0; reg2--)
  {
    byte value2 = pValueArray2 [reg2 - 1];

    for (byte bitMask2 = 128; bitMask2 > 0; bitMask2 >>= 1)
    {
      digitalWrite (g_pinClock2, LOW);
    
      digitalWrite (g_pinData2, value2 & bitMask2 ? HIGH : LOW);
        
      digitalWrite (g_pinClock2, HIGH);
    }
  }
  // Signal to the 595s that I'm done sending
  digitalWrite (g_pinCommLatch2, HIGH);
return

sendSerialData3:
// Signal to the 595s to listen for data
  digitalWrite (g_pinCommLatch3, LOW);
  
  for (byte reg3 = registerCount3; reg3 > 0; reg3--)
  {
    byte value3 = pValueArray3 [reg3 - 1];

    for (byte bitMask3 = 128; bitMask3 > 0; bitMask3 >>= 1)
    {
      digitalWrite (g_pinClock3, LOW);
    
      digitalWrite (g_pinData3, value3 & bitMask3 ? HIGH : LOW);
        
      digitalWrite (g_pinClock3, HIGH);
    }
  }
  // Signal to the 595s that I'm done sending
  digitalWrite (g_pinCommLatch3, HIGH);
return
 
Technology news on Phys.org
1. Function declaration needs a return type (C/C++ is a static typed language).
2. const declaration means the object's properties are not changeable until the const-ness is not cast away.
 
Do you have any idea how to make return value in void declaration?
coz actually I found my program using Basic and using C compiler...
Actually I want to return the value...
 
There are many ways to achieve that, you can simply define your objects globally (assuming they are still in the same accessible scope)
Code:
int x;
void func(int y)
{
    x=y;
    ///...
    return; //unnecessary 
}

int func(int y)
{
    x=y;
    ////...
    return  someIntValue; //this might be used as an exit code for someone who wants to check
}

int getX()
{
   return x; // this is the second function's y value
}
 

Similar threads

  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 23 ·
Replies
23
Views
3K
Replies
12
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 23 ·
Replies
23
Views
2K
  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 22 ·
Replies
22
Views
4K
  • · Replies 14 ·
Replies
14
Views
2K
  • · Replies 10 ·
Replies
10
Views
10K
Replies
1
Views
2K