为啥我会收到此错误? “[variable] 没有命名类型”在 C++ 中用于 std::string 数组,即使它已被包含并且在同一范围内

Posted

技术标签:

【中文标题】为啥我会收到此错误? “[variable] 没有命名类型”在 C++ 中用于 std::string 数组,即使它已被包含并且在同一范围内【英文标题】:Why do I get this error? "[variable] does not name a type" in C++ for std::string array even though it has been included and is in the same scope为什么我会收到此错误? “[variable] 没有命名类型”在 C++ 中用于 std::string 数组,即使它已被包含并且在同一范围内 【发布时间】:2020-08-07 11:37:04 【问题描述】:

我想制作一个用 ASCII 字符打印文本的 ASCII-Art 然后我失败了。因为我已经尝试解决这个错误一个小时了,但我找不到解决方案。

代码:

#include <iostream>
#include <string>
class prnter 
public:
    void print(std::string text) 
        if (text == "A") 

            for (int i = 0;i < 5;i++) 
                std::cout << lett[A][i] << std::endl;
            


        


    


        enum Letters 
        A, // 0
        B, // 1
        C, // 2
        D, // 3
        E, // 4
        F, // 5
        G, // 6
        H, // 7
        I, // 8
        J, // 9
        K, // 10
        L, // 11
        M, // 12
        N, // 13
        O, // 14
        P, // 15
        Q, // 16
        R, // 17
        S, // 18
        T, // 19
        U, // 20
        V, // 21
        W, // 22
        X, // 23
        Y, // 24
        Z  // 25
        ;
        std::string lett[26][5];
        lett[A][0] = " _____";
        lett[A][1] = "/     \\";
        lett[A][2] = "| /_\\ |";
        lett[A][3] = "| | | |";
        lett[A][4] = "|_/ \\_|";

;


我得到这个错误:

include\prnter.h|48|error: 'lett' does not name a type; did you mean 'getw'?|
include\prnter.h|49|error: 'lett' does not name a type; did you mean 'getw'?|
include\prnter.h|50|error: 'lett' does not name a type; did you mean 'getw'?|
include\prnter.h|51|error: 'lett' does not name a type; did you mean 'getw'?|
include\prnter.h|52|error: 'lett' does not name a type; did you mean 'getw'?|

我是 C++ 新手。我认为使用多维数组会是一个好主意,你认为什么可以解决这个问题?我要改用向量吗?

【问题讨论】:

lett[A][0] = " _____"; ... lett[A][4] = "|_/ \\_|"; 可能应该在构造函数中。这是代码:ideone.com/quDk2F 旁白:struct Letter char symbol[5][7]; ; 可能是值得的,而不是假设所有字符串的大小相同。 【参考方案1】:

您不能在函数之外使用“正常”语句。只有声明和定义。

在您的情况下,您可以通过在定义数组时初始化数组来解决问题:

std::string const lett[26][5] = 
    // A
    
      " _____",
      "/     \\",
      "| /_\\ |",
      "| | | |",
      "|_/ \\_|"
    ,
    // B
     .... 
    ....
;

【讨论】:

以上是关于为啥我会收到此错误? “[variable] 没有命名类型”在 C++ 中用于 std::string 数组,即使它已被包含并且在同一范围内的主要内容,如果未能解决你的问题,请参考以下文章

知道为啥我会收到此错误吗?

为啥我会收到此错误:“不支持此功能(数字商品)。”?

为啥我会收到此语法错误? (Python)

为啥我会收到此错误? “孩子未申报?

为啥我会收到此 GRPCProvider UpgradeResourceState terraform 错误?

为啥我会收到此 Webpack 加载程序错误?