Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 305
  • Last Modified:

Using 'pair' Template Generates 'Error: Use ";" to terminate declarations.'

Converting from C++ 4.2 on Solaris to C++ 5.4. Output from compile script and source are below.

Compile script --

(cd timeZone ; make libs )
CC -c -DSVR4 -mt -DPAGE_COUNT_TRANSITION_PHASE=1 -DMCP6 +w -I/bld2/mcpbld/xsi-6.14.1/xsilib/include -I../include -I/bld2/mcpbld/xsi-6.14.1/include -I/bld2/mcpbld/xsi-6.14.1/include/objects -I/bld2/mcpbld/xsi-6.14.1/mcp/include -I/bld2/mcpbld/xsi-6.14.1/include -I/bld2/mcpbld/xsi-6.14.1/include/objects -I/home/sybase/sybase11.1.1/include -library=iostream -library=Cstd  -g -g timeZone.c  -o timeZone.o
"/bld2/mcpbld/xsi-6.14.1/xsilib/include/copy_dial_digits.h", line 51: Error: Use ";" to terminate declarations.
1 Error(s) detected.

Source code --

#ifndef __cplusplus
#include <limits.h>
#include <ctype.h>
#include "pair.h"
#else
#include <limits>
#include <utility>
using namespace std
#include <ctype.h>
#endif

#ifndef __cplusplus
inline pair<unsigned char*,unsigned char>
#else
pair<unsigned char*,unsigned char>
#endif
copy_dial_digits(char*             destination,
             const char*      source,
             char*             terminators,
             int             max_chars = 63)
{
    static pair<unsigned char*,unsigned char> return_value =
      pair<unsigned char*,unsigned char>((unsigned char*)NULL,'\0');

    unsigned char* dp = (unsigned char*)destination;
    unsigned char* sp = (unsigned char*)source;

    //
    // If one or more terminator characters are specified, find the first occurrance
    // of one of them after the first digit, and mark it as the stopping point.
    //
    unsigned char* tp = NULL;
    if(terminators)
    {
      //
      // The terminator must be preceeded by at least one digit.
      //
      char* fd = (char *)strpbrk(source,"0123456789");
      if(fd)
      {
          int sl = strcspn(fd,terminators);
          if(sl) // (*fd is a digit)
          {
            tp = sp+sl+(fd-source);
          }
      }
    }

    while(*sp                          &&
        (tp ?      (sp < tp) : true)       &&
        ((dp-(unsigned char*)destination) < max_chars) )
    {
      if(isdigit(*sp))
          *dp++ = *sp;
      sp++;
    }

    return_value.second = *sp;
    return_value.first  = sp;
    *dp = NULL;
   
    return return_value;
}
0
rogelah
Asked:
rogelah
1 Solution
 
drichardsCommented:
You need a semicolon after "using namespace std" ...

   using namespace std;
0
 
rogelahAuthor Commented:
My only comment (after slapping my head several times) is DUH! Thanks.
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Tackle projects and never again get stuck behind a technical roadblock.
Join Now