错误:'.' 标记之前的预期 unqualified-id - std :: vector

Posted

技术标签:

【中文标题】错误:\'.\' 标记之前的预期 unqualified-id - std :: vector【英文标题】:error: expected unqualified-id before ‘.’ token - std :: vector错误:'.' 标记之前的预期 unqualified-id - std :: vector 【发布时间】:2012-08-04 11:10:15 【问题描述】:

代码:

#include <vector>
#include <iostream>

typedef struct

    std :: string latitude;
    std :: string longitude;
 coordinate;

std :: vector <coordinate> previousPoints;

int main ()

    coordinate.latitude  = latitude;
    coordinate.longitude = longitude;
    previousPoints.push_back (coordinate);

    return 0;

输出:

anisha@linux-y3pi:~> g++ -Wall demo.cpp
demo.cpp: In function ‘int main()’:
demo.cpp:14:12: error: expected unqualified-id before ‘.’ token
demo.cpp:15:12: error: expected unqualified-id before ‘.’ token
demo.cpp:16:38: error: expected primary-expression before ‘)’ token

我错过了什么?

【问题讨论】:

【参考方案1】:

您需要创建一个实际变量以添加到您的向量中:

int main ()

    coordinate c;
    c.latitude  = latitude;
    c.longitude = longitude;
    previousPoints.push_back (c);

【讨论】:

我不敢相信!!哇,有时我会很健忘,谢谢, 一些编程风格强制使用某些字母大写来避免这类问题。例如,如果您要始终使用前导大写字母命名数据类型,并且从不在标识符中使用前导大写字母,那么您在键入时就可以避免这个问题中的代码 YePhlck,我用的是“camelBack”,这不可能把我救在这里;)。 @ForEveR 此外,这只是我在此处创建的可复制示例的一部分。所以,实际的文件当然不会有全局变量。 @AnishaKaul coordinate 应该是 Coordinate @juanchopanza camelBack 风格不允许这样做。不过,我会看看还有哪些款式。【参考方案2】:
typedef struct

    std :: string latitude;
    std :: string longitude;
 coordinate;

coordinate 是匿名结构上的 typedef,而不是对象。你应该在你的函数中创建coordinate的对象,或者不使用typedef,即

struct coord

    std :: string latitude;
    std :: string longitude;
 coordinate;

现在,coordinate 是对象。还有一个问题,为什么在std:: 之后输入空格?这是合法的,但很奇怪。

【讨论】:

这两种方法我都试过了,没用。 YePhlck 已确定故障。 :: 后的空格使代码在“我”看来“干净”。 @AnishaKaul Ehm... 第一种方法是在 main 中创建坐标对象(YePhlck 建议这样),第二种方法 - 坐标是 coord 类型的全局对象... 拥有全局变量几乎从来都不是一个好主意,所以我不会建议将此作为解决方案,TBH @YePhIcK 是的,全局对象是邪恶的,但有时 - 没关系,所以,我建议第一个解决方案,因为 OP 的代码看起来像使用全局对象。【参考方案3】:
coordinate.latitude  = latitude;

您需要一个对象来访问它的成员,但coordinate 只是命名一个结构。同样在右侧,您没有价值...您需要类似的东西:

coordinate c;
c.latitude  = "120";
c.longitude = "10";
previousPoints.push_back(c);

【讨论】:

以上是关于错误:'.' 标记之前的预期 unqualified-id - std :: vector的主要内容,如果未能解决你的问题,请参考以下文章

来自 Qt 文件的编译时错误:在 ')' 标记之前预期的 unqualified-id

错误:在 Linux (Centos) 中的“__extension__”之前预期的 unqualified-id

SpriteBatch 和 SpriteFont (DirectXTK) 抛出错误(预期的 unqualified-id)

我收到错误错误类型参数一元减号和预期';'在 ':' 标记之前

C++:错误:“”标记之前的预期类名

gcc 错误“预期 ')' 在 '[' 标记”之前