【问题标题】: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

我错过了什么?

【问题讨论】:

    标签: c++ vector std


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2013-07-06
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多