2016-02-24 35 views
5

Tôi đang sử dụng VS 2015 Enterprise và tôi đã chạy thử nghiệm đơn vị chung để phân tích mức độ phù hợp của mã. Tôi đang xem danh sách các khối được bao phủ cho mỗi chức năng, và nhìn chung chúng có vẻ đúng. Tuy nhiên, khi tôi nhấp chuột phải vào một phương thức -> "Đi tới mã nguồn", trên một số chức năng, nó sẽ đến đúng vị trí trong mã nguồn (tệp .cpp có liên quan), nhưng trên những người khác, nó cố gắng mở tệp tiêu đề (số dòng nguồn là chính xác, nhưng mã nằm trong tệp .cpp - không phải tệp .h). Điều này ảnh hưởng đến việc làm nổi bật mã nguồn - các chức năng mà VS cho là nằm trong .h không được tô sáng trong .cpp. Tôi không thể xác định bất kỳ sự khác biệt trong các chức năng (cùng một tầm nhìn, cùng một tiêu đề và các tập tin nguồn), ngoại trừ có thể là chủ đề mà họ đang gọi. Bất kỳ ý tưởng tại sao VS nghĩ rằng một số mã trong .h chứ không phải là .cpp?Visual Studio 2015 Mã Bảo hiểm Tệp sai

+0

[mcve] sẽ hữu ích. Bạn đang sử dụng chức năng templated? – AndyG

+0

Tôi đồng ý. Không có chức năng templated. – Jeff

+0

Dự án x64 hay x86? Tôi nhớ lại rằng có vấn đề với x64. – AndyG

Trả lời

0

Dường như, mặc dù VS 2015 hỗ trợ tính năng C++ 11 non-static data member initializers (nó biên dịch chính xác), công cụ phủ sóng cho phép trên tính năng này. Đây là MCVE. Tôi đang sử dụng bản cập nhật VS 14.0.24720.00 1. Để tái tạo, biên dịch chương trình này, sau đó nhận mã bảo hiểm bằng cách chạy nó bằng cách sử dụng Generic Test. Nếu x được khởi tạo, công cụ bảo hiểm sẽ tìm mã cho hàm tạo trong tệp .h. Nếu bạn lấy ra = 0, nó xác định chính xác định nghĩa hàm tạo như trong .cpp. Trong mã sản phẩm của tôi, nó không phải là hàm tạo, nhưng các hàm dường như ngẫu nhiên mà công cụ vùng phủ sóng nghĩ đã được định nghĩa trong tệp .h. Việc sửa chữa, trong trường hợp của tôi, chỉ là để di chuyển thành viên dữ liệu khởi tạo vào danh sách khởi tạo constructor.

//.h 
class Test 
{ 
public: 
    Test(); 
    ~Test(); 

    void Func1(); 

    void Func2(); 

    void Func3(); 

    int x = 0; 
}; 

.

// .cpp 
#include "Test.h" 

#include <iostream> 

Test::Test() 
{ 
    std::cout << "in Test()" << std::endl; 
} 

Test::~Test() 
{ 
} 

void Test::Func1() 
{ 
    std::cout << "in Func1" << std::endl; 

    Func2(); 

    Func3(); 
} 

void Test::Func2() 
{ 
    std::cout << "in Func2" << std::endl; 
} 

void Test::Func3() 
{ 
    std::cout << "in Func3" << std::endl; 
} 
Các vấn đề liên quan