C 和 C++:带有错误"Expected unqualified-id"的数据文件
C and C++ : data file with error "Expected unqualified-id"
我想在MacOS Sierra 10.12上使用Xcode 8.33在C 中运行C代码。我是C/C ,编译器等的新手,所以请忍受我。C代码通过终端与make
进行编译并运行时。但是,当我将所有相同的文件扔到Xcode C 项目中时,数据文件出现错误。注意:我确实将main.c
更改为main.cpp
。
//**** main.cpp *****
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <ctype.h>
extern "C" {
#include "msclib.h"
}
int main(int argc, char** argv)
{
assert(argc >= 1);
return msc_get_no(argv[1]);
}
文件msclib.c
在数据文件mscmix_dat.c
上调用。这也是msclib.h
// ***** msclib.h *****
extern size_t msc_get_no(const char*);
// ***** msclib.c *****
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include "msclib.h"
struct msc_data
{
const char* code;
const char* desc;
};
typedef struct msc_data MSCDat;
static const MSCDat mscdat[] =
#include "mscmix_dat.c"
;
static const size_t msccnt = sizeof(mscdat) / sizeof(mscdat[0]);
static int msc_cmp(const void* a, const void* b)
{
const char* msc_code = a;
const MSCDat* p = b;
return strcmp(msc_code, p->code);
}
size_t msc_get_no(const char* msc_code)
{
assert(NULL != msc_code);
assert(strlen(msc_code) == 5);
MSCDat* p = bsearch(msc_code, &mscdat[0], msccnt, sizeof(mscdat[0]), msc_cmp);
if (NULL == p)
{
fprintf(stderr, "MSC "%s" not validn", msc_code);
return 0;
}
assert(NULL != p);
return p - &mscdat[0];
}
运行/编译时,mscmix_dat.c
文件获取错误Expected identifier or (
-这是我需要的帮助。即使我用.cpp
替换mscmix_dat.c
,我也会得到错误Expected unqualified-id
// ***** mscmix_dat.c *****
{ //<-- Xcode highlights this line and gives the error
{ "*****", "Error" },
{ "00-01", "Instructional exposition (textbooks, tutorial papers, etc.)" },
{ "00-02", "Research exposition (monographs, survey articles)" },
{ "00A05", "General mathematics" },
.
.
.
}
我将感谢关于为什么发生此错误的解释,有关如何修复该错误的建议以及在处理此数据文件的必要替代方案。谢谢!
op op。这些是根据我的问题的最后编辑来解决问题的步骤:
- 在我的问题中给出的单独文件中,错误是
mscmix_dat.c
中的Expected identifier
。 - per @lightnessraceSinorbit的建议,我通过将
#include thisfile.c
替换为Main.cpp和msclib.c,将多个main.cpp,msclib.h,msclib.h,msclib.c和mscmix_dat.c files合并到两个文件中:main.cpp和msclib.c。内容。我还通过简单重命名将msclib.c更改为.cpp。这消除了Expected identifier
的原始错误,但出现了新的错误。 - 编译两个文件在
msclib.cpp
中给出了多个错误,所有WRT变量类型转换。 - 由于与C的C 差异,我通过铸造处理了类型转换问题,但也尊重
const
。
以下是我的最后一项成功编译代码。
// **** main.cpp ****
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <ctype.h>
#include<string>
#include<iostream>
using namespace std;
extern size_t msc_get_no(const char*);
int main(int argc, char** argv)
{
assert(argc >= 0);
return (int)msc_get_no(argv[1]); // casting
}
// **** msclib.cpp ****
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
extern size_t msc_get_no(const char*);
struct msc_data
{
const char* code;
const char* desc;
};
typedef struct msc_data MSCDat;
static const MSCDat mscdat[] =
{
{ "*****", "Error" },
{ "00-01", "Instructional exposition (textbooks, tutorial papers, etc.)" },
{ "00-02", "Research exposition (monographs, survey articles)" },
{ "00A05", "General mathematics" }
}
;
static const size_t msccnt = sizeof(mscdat) / sizeof(mscdat[0]);
static int msc_cmp(const void* a, const void* b)
{
const char* msc_code = static_cast<const char*>(a); //<----
const MSCDat* p = static_cast<const MSCDat*>(b); // (const MSCDat*)b also works
return strcmp(msc_code, p->code);
}
size_t msc_get_no(const char* msc_code)
{
assert(NULL != msc_code);
assert(strlen(msc_code) == 5);
MSCDat* p; // changed initialization of p
p = (MSCDat*) bsearch(msc_code, &mscdat[0], msccnt, sizeof(mscdat[0]), msc_cmp);
if (NULL == p)
{
fprintf(stderr, "MSC "%s" not validn", msc_code);
return 0;
}
assert(NULL != p);
return p - &mscdat[0];
}
相关文章:
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- Arduino无法编译名为SP:"Expected ')' before '(' token"的变量
- 为什么我的功能在使用 goto 时会给我带来"expected primary-expression before '}' token"?
- 为什么我会"error: expected expression"?
- 错误消息"expected expression"....有人知道它为什么这么说吗?
- C++中的"expected unqualified-id"错误是什么?
- 我正在尝试创建一个枚举,但得到了"identifier expected error"
- 如何修复此错误"expected primary expression before 'int'"?
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- "expected a '>'"类模板专业化?
- 如何修复"expected a declaration"?
- 使用结构和数组时的"expected primary expression before '.' token"
- 如何解决"Expected expression before " = " token"?
- Rcpp 'candidate function has different number of parameters (expected 0 but has 1)'
- 错误:创建模板类时"expected unqualified-id before '{' token"
- C++:"Expected '(' for function-style cast or type construction"错误
- NDK 构建中的异常"error: expected ';' after top level declarator"
- C++:将运算符作为参数传递会导致错误"expected an identifier"
- 在编译main.cpp:3:1时,我一直得到这个错误:error: ' do '之前的expected unqual