声明'args'作为引用数组错误

时间:2014-06-02 07:06:10

标签: c++ c++11 g++

我是c ++ boost的新手,我有一个程序试图编译它

#include "Program.h"
#include <boost/asio/io_service.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/asio/ip/address.hpp>
#include <boost/asio/ip/udp.hpp>

namespace ConsoleApp
{

    void Main(std::wstring& args[])
    {
            .
            .
    }
}

出现的错误是

Program.cpp:11:31: error: declaration of ‘args’ as array of references
  void Main(std::wstring& args[])

这里的任何人都可以帮助我,这个代码错误了吗? 谢谢

1 个答案:

答案 0 :(得分:3)

错误几乎就是说什么。 std::wstring& args[]是wstring([])引用(std::wstring)的数组(&)。您不能拥有一系列参考文献 - 请参阅Why are arrays of references illegal?

注意:你在C ++中进行编码,主要功能应该是:

int main(int argc, char *argv[])
{
    // Your code

    return 0;
}

修改

AFAIK主函数不能在任何命名空间中。

此外,您的代码还有一个问题 - 即使我们可以创建引用数组,也没有存储有关数组长度的信息。除了第一个元素,你无法使用它!

无论如何,您可以执行以下操作(将wstring替换为string因为我是懒惰的):

#include <vector>
#include <string>

namespace ConsoleApp
{
    void Main(std::vector<std::string> &args)
    {

    }
}

int main(int argc, char *argv[])
{
    std::vector<std::string> args;
    args.resize(argc);

    for(int i = 0; i < argc; ++i)
    {
        args[i] = argv[i];
    }

    ConsoleApp::Main(args);

    return 0;
}