繁体   English   中英

未在范围C ++中声明[数组]

[英]Not declared in scope C++ [Arrays]

我有一个快速的问题。 但是,尝试创建一个打印出数组的方法,编译器告诉我它没有在范围内声明。

这是我的代码:

int main() {
    int theArray[10] = {41, 23, 43, 12, 43, 23, 12, 41, 29, 102};
    printArray(theArray, 10);
}

这是我的printArray方法:

void printArray(int arr[], int size) {
    int i;

   for (i = 0; i < size; i ++) {
       std::cout <<" "<< arr[i];
       std::cout << std::endl;
   }
}

我有什么问题吗?

你的代码非常好。 只要确保存在必要的includes 以及方法的顺序:

#include <iostream>
#include <string>

void printArray(int arr[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        std::cout << " " << arr[i];
        std::cout << std::endl;
    }
}

int main() {
    int theArray[10] = { 41, 23, 43, 12, 43, 23, 12, 41, 29, 102 };
    printArray(theArray, 10);
    return 0;
}

或使用forward declaration

#include <iostream>
#include <string>

void printArray(int arr[], int size);

int main() {
    int theArray[10] = { 41, 23, 43, 12, 43, 23, 12, 41, 29, 102 };
    printArray(theArray, 10);
    return 0;
}

void printArray(int arr[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        std::cout << " " << arr[i];
        std::cout << std::endl;
    }
}

但是,您可以使用更多C ++现代风格编写它:

1)使用模板化功能

#include <iostream>
#include <string>
#include <array>
template<std::size_t N> void printArray(std::array<int, N> x) {
    for (auto const& item:x){
        std::cout << " " << item << std::endl;
    }
}

int main() {
    std::array <int, 10> theArray{ { 41, 23, 43, 12, 43, 23, 12, 41, 29, 102 } };
    printArray<10>(theArray);
    return 0;
}

2)使用迭代器更好:

#include <iostream>
#include <string>
#include <array>
template<typename Iterator> void printArray(Iterator beg, Iterator end) {
    for (auto it = beg; it != end; it = std::next(it)){
        std::cout << " " << *it << std::endl;
    }
}

int main() {
    std::array <int, 10> theArray{ { 41, 23, 43, 12, 43, 23, 12, 41, 29, 102 } };
    printArray(std::begin(theArray), std::end(theArray));
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM