标签: using-directives

"使用命名空间"到底做了什么?

以下C++测试代码没有链接(gcc 4.9.2,binutils 2.25).错误是In function 'main': undefined reference to 'X::test'.

01: #include <string>
02: #include <iostream>
03:
04: namespace X
05: {
06:     extern std::string test;
07: };
08:
09: using namespace X;
10: std::string test = "Test";
11:
12: int main()
13: {
14:    std::cout << X::test << std::endl;
15: }
Run Code Online (Sandbox Code Playgroud)

由于第09行,我期待第10行定义X::test在第06行声明的变量.我相信test在全局命名空间中声明和定义了一个不相关的变量,因此链接错误.

问题:有人可以解释为什么我的期望不正确,究竟发生了什么?

不是答案:

  • 我可以将它改为第10行std::string X::test = "Test";.
  • 我不应该使用"using namespace"开头.

c++ scope namespaces using-directives forward-declaration

19
推荐指数
2
解决办法
3413
查看次数

如何使用angularJS正确绑定指令和控制器之间的范围

我正在尝试使用anugularJS生成一个n级分层无序列表,并且已经能够成功完成.但是现在,我在指令和控制器之间存在范围问题.我需要在指令模板中通过ng-click调用的函数中更改父类的scope属性.

请参阅http://jsfiddle.net/ahonaker/ADukg/2046/ - 这是JS

var app = angular.module('myApp', []);

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {
    $scope.itemselected = "None";
    $scope.organizations = {
        "_id": "SEC Power Generation",
        "Entity": "OPUNITS",
        "EntityIDAttribute": "OPUNIT_SEQ_ID",
        "EntityID": 2,
        "descendants": ["Eastern Conf Business Unit", "Western Conf Business Unit", "Atlanta", "Sewanee"],
        children: [{
            "_id": "Eastern Conf Business Unit",
            "Entity": "",
            "EntityIDAttribute": "",
            "EntityID": null,
            "parent": "SEC Power Generation",
            "descendants": ["Lexington", "Columbia", "Knoxville", "Nashville"],
            children: [{
                "_id": "Lexington",
                "Entity": "OPUNITS",
                "EntityIDAttribute": "OPUNIT_SEQ_ID",
                "EntityID": 10,
                "parent": "Eastern …
Run Code Online (Sandbox Code Playgroud)

scope using-directives hierarchy angularjs

18
推荐指数
2
解决办法
4万
查看次数

默认使用新C#文件中的指令

为什么Visual Studio 2008会自动将以下using指令插入到我创建的每个新C#文件中?

using System; 
using System.Collections.Generic; 
using System.Text;
Run Code Online (Sandbox Code Playgroud)

这些命名空间有什么特别之处?这些是最常用的吗?

default using-directives visual-studio

17
推荐指数
1
解决办法
1万
查看次数

是什么要求我声明"using namespace std;"?

这个问题可能重复,但我找不到一个好的答案.简短而简单,需要我申报

using namespace std;
Run Code Online (Sandbox Code Playgroud)

在C++程序中?

c++ namespaces using using-directives include

17
推荐指数
5
解决办法
7963
查看次数

目的是什么:"使用命名空间"?

有令人信服的论据反对 using namespace std,为什么它被引入语言呢?不using namespace破坏命名空间的目的吗?我为什么要写using namespace?是否有任何问题我不知道这是通过优雅地解决using namespace,也许是在using std::swap成语或类似的东西?

c++ namespaces using-directives

17
推荐指数
1
解决办法
6385
查看次数

找不到类型或命名空间(您是否缺少using指令或程序集引用?)

我尝试编译C#程序时出现以下错误:

The type or namespace name 'Login' could not be found (are you missing a using directive or an assembly reference?)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FootballLeague
{
    public partial class MainMenu : Form
    {
    FootballLeagueDatabase footballLeagueDatabase;
    Game game;
    Team team;
    Login login; //Error here

    public MainMenu()
    {
        InitializeComponent();
        changePanel(1);
    }

    public MainMenu(FootballLeagueDatabase footballLeagueDatabaseIn)
    {
        InitializeComponent();
        footballLeagueDatabase = footballLeagueDatabaseIn;
    }

    private void Form_Loaded(object sender, EventArgs e)
    {
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# using-directives

16
推荐指数
2
解决办法
12万
查看次数

通过using-directive调用begin和end?

已经确定的调用习惯swap是:

using std::swap
swap(foo, bar);
Run Code Online (Sandbox Code Playgroud)

这样,swap可以为std命名空间之外的用户定义类型重载.

我们应该调用begin,并end以同样的方式?

using std::begin;
using std::end;
some_algorithm(begin(some_container), end(some_container));
Run Code Online (Sandbox Code Playgroud)

或者我们应该写:

some_algorithm(std::begin(some_container), std::end(some_container));
Run Code Online (Sandbox Code Playgroud)

c++ stl using-directives argument-dependent-lookup c++11

16
推荐指数
2
解决办法
626
查看次数

使用指令在C++/CLI中指定类别名

在C#中,有三种使用指令:

using System; // Specify Namespace
using Diag = System.Diagnostics; // Specify Namespace Alias
using DBG = System.Diagnostics.Debug;  // Specify Class Alias
Run Code Online (Sandbox Code Playgroud)

在C++/CLI中,我知道前两个的等价物:

using namespace System;
namespace Diag = System::Diagnostics;
Run Code Online (Sandbox Code Playgroud)

有没有办法在C++/CLI中做第三个?

做的namespace DBG = System::Diagnostics::Debug;error C2879: 'System::Diagnostics::Debug' : only an existing namespace can be given an alternative name by a namespace alias definition

我提出的唯一的交替是#define DBG System::Diagnostics::Debug,但我更喜欢正确的使用指令,如果可用的话.

c++-cli using-directives

15
推荐指数
1
解决办法
4638
查看次数

如何使用Roslyn检测脚本(而不是文档)中未使用的导入?

我正在编写一个系统来处理作为Noda Time的单元测试编写的片段,因此我可以在文档中包含这些片段.我有第一次通过工作,但我想整理代码.处理代码片段时需要做的一件事就是using确定该代码段实际需要哪些指令.(单个源文件中可能有多个片段,但每个片段将单独出现在文档中 - 我不希望从一个片段导入影响另一个片段.)

工作与代码的交易Document情况-我创建一个单独的Document包含单一方法,所有潜在的进口量平均片段,将其添加到项目中,然后删除不必要using这样的指令:

private async static Task<Document> RemoveUnusedImportsAsync(Document document)
{
    var compilation = await document.Project.GetCompilationAsync();
    var tree = await document.GetSyntaxTreeAsync();
    var root = tree.GetRoot();
    var unusedImportNodes = compilation.GetDiagnostics()
        .Where(d => d.Id == "CS8019")
        .Where(d => d.Location?.SourceTree == tree)
        .Select(d => root.FindNode(d.Location.SourceSpan))
        .ToList();
    return document.WithSyntaxRoot(
        root.RemoveNodes(unusedImportNodes, SyntaxRemoveOptions.KeepNoTrivia));
}
Run Code Online (Sandbox Code Playgroud)

因为我已经知道我可以使用IOrganizeImportsService同一个文档工作时,但我喜欢到只是把它写的Script,因为那种感觉以各种方式更清洁.

创建脚本很简单,所以我想分析一下未使用的导入(在一些早期的清理步骤之后).这是我希望用于脚本的代码:

private static Script RemoveUnusedImports(Script script)
{
    var compilation = …
Run Code Online (Sandbox Code Playgroud)

c# using-directives roslyn

15
推荐指数
1
解决办法
1494
查看次数

可以在声明它们的命名空间之外定义类成员吗?

有时候我会找到类似下面的代码(实际上有些类向导会创建这样的代码):

// C.h
namespace NS {

class C {
    void f();
};

}
Run Code Online (Sandbox Code Playgroud)

并在实现文件中:

// C.cpp
#include "C.h"

using namespace NS;
void C::f() {
  //...
}
Run Code Online (Sandbox Code Playgroud)

我试过的所有编译器都接受那种代码(gcc,clang,msvc,compileonline.com).是什么让我感到不舒服的是using namespace NS;.从我的观点来看,C::f()生活在全局命名空间中的环境中,该环境对生活在命名空间NS中的对象具有不合格的访问权限.但是在编译器的观点中void C::f()存在namespace NS.正如我尝试的所有编译器都分享了这一观点,他们可能是正确的,但是标准中的这个意见得到了支持?

c++ namespaces using-directives language-lawyer c++11

14
推荐指数
1
解决办法
912
查看次数